友人、3 つの一意の列を選択し、選択した列を列ベクトルといくつかのスカラーを返すカスタム関数に送信するデータ フレームがあります。これを行うためにRで簡潔なコードを使用する方法があるかどうか疑問に思っていました. では、詳しく説明しましょう。
これが私のデータフレームだとします:
> data
X1 X2 X3 X4 X5
1 1 5 9 13 17
2 2 6 10 14 18
3 3 7 11 15 19
4 4 8 12 16 20
次に、このデータ フレームから 3 つの一意の列をすべて選択するインデックスを作成します。
> cols=combn(ncol(mat), 3)
> cols
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 2 2 2 3
[2,] 2 2 2 3 3 4 3 3 4 4
[3,] 3 4 5 4 5 5 4 5 5 5
そして名前を連結します:
> nams<-apply(combn(colnames(data),3), 2, function(z) paste(z, collapse = ' '))
> nams
[1] "X1 X2 X3" "X1 X2 X4" "X1 X2 X5" "X1 X3 X4" "X1 X3 X5" "X1 X4 X5" "X2 X3 X4"
[8] "X2 X3 X5" "X2 X4 X5" "X3 X4 X5"
今、これは私がどのように進むべきかわからない部分です. 送信された 3 つのベクトルで動作し、ベクトルとスカラーで構成されるオブジェクトを返すカスタム関数を最適に記述する方法。たとえば、X1+X2+X3 と、X1、X2、X3 の平均値や標準偏差などのスカラー値を返します。
以下が関数であるとします。
someFunc <- function(subMat){
someFunc$vector=subMat[,1]+subMat[,2]+subMat[,3] # return vector
someFunc$mean1=mean(subMat[,1])
someFunc$sd1=sd(subMat[,1])
someFunc$mean2=mean(subMat[,2])
someFunc$sd2=sd(subMat[,2])
someFunc$mean3=mean(subMat[,3])
someFunc$sd3=sd(subMat[,3])
return(someFunc)
}
ベクトルとスカラーを処理および送信するために R のカスタム関数を構築する方法を理解しようとしていると思います。したがって、上記の関数を大まかな試みと考えてください。
次のステップ。他の投稿の 1 つで、@Prasad Chalasani は、ベクトルがそのような関数を送信する適切な R の方法には、apply 関数の使用が含まれると指摘しましたが、私はそれらをまとめることができないようです。
result <- apply( cols, 2, someFunc ........
不明な点がある場合はお知らせください。問題をさらに明確にするために最善を尽くします。要約すると、データフレームがあり、そこから3つの一意の列をすべて関数に送信し、複数の結果を返します。そのような関数を定義し、適用を使用してデータを送信するのに問題があります。