0

次の形式で lapply 関数を使用しています。

y=rnorm(10)
x1=c(1,1,1,2,2,2,3,3,3,4)
x2=c(5,5,6,6,7,7,8,8,9,9)
x3=c(7,7,8,8,9,9,10,10,11,11)

t1 <- outer(x1, unique(x1), '<=')
t2 <- outer(x2, unique(x2), '<=')
t3 <- outer(x3, unique(x3), '<=')
lapply(seq_along(unique(x1)), function(idx) t(y*t1[,idx]*t2) %*% t3)

私は R の初心者なので、上記の lapply 呼び出しを一般化して別の変数を追加するのに問題があります。つまり、lapply は 2 つの引数の関数を呼び出すことになります。これは私がやろうとしたことです:

x4=c(7,6,6,5,9,5,10,1,1,2)
t4 <- outer(x4, unique(x4), '<=')
lapply(list(idx1=seq_along(unique(x1)),idx4=seq_along(unique(x4))),
       function(idx1,idx4) t(y*t1[,idx1]*t2) %*% t3*t4[,idx4])

ここでの考え方は次のとおりです。idx1 を修正してから、各 idx4 に対して lapply 関数を使用します。次に、次の idx1 についても同じです。私は入れ子になったラップリーのようなものになるはずです。

これまでのところ、これを行う正しい方法を思い付くことができません。誰かが何かヒントを提供してくれますか?

PS .: この質問は私が以前に尋ねた質問に関連していますが、ここでの問題は、以前の回答を 4 次元に一般化できないことです。今後、この一般化を行う方法についてのヒントを求めています。ありがとう

4

1 に答える 1

0

2つのラップリー関数をネストして、それを解決する方法を得たと思います。

lapply(seq_along(unique(x)), function(idx){lapply(seq_along(unique(r)),
                                              function(idr) t(y*t1[,idx]*t2)%*%(t3
                                              *t4[,idr]))})

これは間違いなく私の問題を解決します。誰かがよりクリーンなソリューションを持っている場合は、投稿してください。

于 2013-11-17T16:37:08.800 に答える