2017-08-05 10 views
-1

すべてのベクトルタイプに対して同時にS3メソッドを作成できますか?私。数値、整数、文字などのベクトルのために呼び出されるもの。このような何か:タイプ別クラスベクトルのS3メソッドR

first_element <- function(x, ...){ 
    UseMethod("first_element", x) 
} 

first_element.vector <- function(x){ 
    x[1] 
} 

first_element(1:3) 
+1

これは[['? – Benjamin

+1

私はそう信じていません。クラス 'vector'はありません。'?class'のクラスの説明を見てください。 –

+0

@ベンジャミン:これは単なる例であり、有用な機能ではないと思われます。 – tover

答えて

1

は、私はあなたが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 ... 
+0

ありがとうございます。しかし、私はベクトルオブジェクトを変更する必要がないソリューションを期待していました。 – tover

+0

ベクトルオブジェクトを変更したくない場合は、新しい変数に代入せずに 'structure'関数を実行するだけです。追加の機能でこれをラップして、必要な要素を印刷することができます。あなたは何を達成しようとしているかについて私たちにいくつかの情報をお願いしますか?ありがとう – Justin

+0

私はS3のコンセプトで遊んでいました。そのためには、オブジェクトの最初の要素を返すだけの方法について考えてみました。だから私は、リスト、データ、フレーム、およびすべてのベクトルクラス(数値、整数、文字、...)のための異なるメソッドを必要とするという問題にぶつかり、不必要なコードの繰り返しが多かったようでした。私がより有用な方法のために同じ問題に遭遇する場合には、より良い方法があるかどうか疑問に思う。後の見解では、実際の生活のアプリケーションはそれほど多くないかもしれません。 – tover

関連する問題