R関数で複数のオブジェクトを返すにはどうすればよいですか? Javaでは、クラスを作成し、おそらくPerson
を作成します。このクラスは、いくつかのプライベート変数を持ち、おそらくheight
、age
などをカプセル化します。
しかし、Rでは、データのグループを渡す必要があります。たとえば、R関数が文字のリストと整数の両方を返すようにするにはどうすればよいですか?
他の多くの言語とは異なり、R関数は厳密な意味で複数のオブジェクトを返しません。これを処理する最も一般的な方法は、list
オブジェクトを返すことです。したがって、関数に整数foo
と文字列のベクトルbar
がある場合、これらの項目を組み合わせたリストを作成できます。
foo <- 12
bar <- c("a", "b", "e")
newList <- list("integer" = foo, "names" = bar)
次に、return
このリスト。
関数を呼び出した後、newList$integer
またはnewList$names
を使用してこれらのそれぞれにアクセスできます。
他のオブジェクトタイプはさまざまな目的でより適切に機能する可能性がありますが、list
オブジェクトは開始するのに適した方法です。
同様に、Javaでは、Rで情報をカプセル化するS4クラスを作成できます。
setClass(Class="Person",
representation(
height="numeric",
age="numeric"
)
)
その後、関数はこのクラスのインスタンスを返すことができます。
myFunction = function(age=28, height=176){
return(new("Person",
age=age,
height=height))
}
情報にアクセスできます:
aPerson = myFunction()
aPerson@age
aPerson@height
これらの線に沿って何か探していますか?
x1 = function(x){
mu = mean(x)
l1 = list(s1=table(x),std=sd(x))
return(list(l1,mu))
}
library(Ecdat)
data(Fair)
x1(Fair$age)
スーパー割り当てを使用することもできます。
「<-」ではなく「<<-」と入力します。この関数は、その名前のオブジェクトを1つ上の機能レベルで再帰的に繰り返し検索します。見つからない場合は、グローバルレベルで作成されます。
for()
をassign()
と組み合わせて使用すると、多くのオブジェクトを作成できます。 assign()
の例を参照してください。
for(i in 1:6) { #-- Create objects 'r.1', 'r.2', ... 'r.6' --
nam <- paste("r", i, sep = ".")
assign(nam, 1:i)
新しいオブジェクトを見る
ls(pattern = "^r..$")
これを処理する1つの方法は、情報をプライマリの属性として配置することです。強調する必要があります。これは、一方の情報が他方の情報を持つように2つの情報が関連している場合にのみ行うのが適切だと思います。
たとえば、「重要な変数」または変数名のリストをデータフレームの属性として保存することで大幅に変更された変数の名前を隠します。
attr(my.DF, 'Modified.Variables') <- DVs.For.Analysis$Names.of.Modified.Vars
return(my.DF)
これにより、データフレーム自体に変数名のリストを保存できます。