すべてのベクトルタイプに対して同時にS3メソッドを作成できますか?私。数値、整数、文字などのベクトルのために呼び出されるもの。このような何か:タイプ別クラスベクトルのS3メソッドR
first_element <- function(x, ...){
UseMethod("first_element", x)
}
first_element.vector <- function(x){
x[1]
}
first_element(1:3)
すべてのベクトルタイプに対して同時にS3メソッドを作成できますか?私。数値、整数、文字などのベクトルのために呼び出されるもの。このような何か:タイプ別クラスベクトルのS3メソッドR
first_element <- function(x, ...){
UseMethod("first_element", x)
}
first_element.vector <- function(x){
x[1]
}
first_element(1:3)
は、私はあなたがclass
を意味すると仮定します。 structure
関数を使用すると、ベクトルの複数のクラスを定義できます。
まず、いくつかのデータを作成し、そのクラスを見ます。
set.seed(1)
vector <- rnorm(100, mean = 1, sd = 3)
class(vector)
>[1] "numeric"
head(vector)
>[1] -0.8793614 1.5509300 -1.5068858 5.7858424 1.9885233 -1.4614052
ベクターでstructure
関数を使用して、追加のクラスを定義します。次にclass
を確認し、str
関数を呼び出してnew_vector
オブジェクトのクラスとデータを確認します。
new_vector <- structure(vector, class = c("character", "integer", "numeric", "double"))
class(new_vector)
>[1] "character" "integer" "numeric" "double"
str(new_vector)
>Classes 'character', 'integer', 'numeric', 'double' num [1:100] -0.879 1.551 -1.507 5.786 1.989 ...
ありがとうございます。しかし、私はベクトルオブジェクトを変更する必要がないソリューションを期待していました。 – tover
ベクトルオブジェクトを変更したくない場合は、新しい変数に代入せずに 'structure'関数を実行するだけです。追加の機能でこれをラップして、必要な要素を印刷することができます。あなたは何を達成しようとしているかについて私たちにいくつかの情報をお願いしますか?ありがとう – Justin
私はS3のコンセプトで遊んでいました。そのためには、オブジェクトの最初の要素を返すだけの方法について考えてみました。だから私は、リスト、データ、フレーム、およびすべてのベクトルクラス(数値、整数、文字、...)のための異なるメソッドを必要とするという問題にぶつかり、不必要なコードの繰り返しが多かったようでした。私がより有用な方法のために同じ問題に遭遇する場合には、より良い方法があるかどうか疑問に思う。後の見解では、実際の生活のアプリケーションはそれほど多くないかもしれません。 – tover
これは[['? – Benjamin
私はそう信じていません。クラス 'vector'はありません。'?class'のクラスの説明を見てください。 –
@ベンジャミン:これは単なる例であり、有用な機能ではないと思われます。 – tover