0

によって計算された主成分回転ベクトルのサブリストがありますprcomp。ここで、各リスト項目はNx2各クラスの配列 (つまり、2 つの列ベクトル) です。

これらのベクトルを使用して、同様に構造化されたいくつかのデータをクラスのリストに射影したいと思います。各クラス項目には、次元NxMxTの配列が含まれています。ここTで、 は試行回数です。

私の問題は、単純なベクトル化された関数applyとそのバリアントを記述できることですが、これを一般化して各リストに適用するのに苦労しています。

サンプルデータ:

somedata <- list(array(rnorm(100),dim=c(5,4,5)),array(rnorm(100),dim=c(5,4,5)))
somevectors <- list(array(rnorm(10),dim=c(5,2)),array(rnorm(10),dim=c(5,2)))

各リスト要素に対する操作の簡単な例を次に示します。

o.proj.1 <- apply(somedata[[1]],3,function(x){
    t(somevectors[[1]]) %*% x
  }) # returns an array where each projected trial is a column

への呼び出しの中にこれを当てはめようとしましたlapply()が、あまり成功しませんでした:

lapply(somedata, y = somevectors, function(x,y){
  apply(x,3,function(z){
    t(y) %*% z
  })
})

Error in t(y) %*% z : requires numeric/complex matrix/vector arguments

基本的に、私のアルゴリズムは、よりローカルな関数の周りに適切なapply型 (ここlapply) を配置し、ベクトル化されるインデックス (ここ[[]]) を削除することです。私は何が欠けていますか?

4

1 に答える 1

2

*apply関数ファミリのうち、mapply2 つ以上のオブジェクトを同時にループしたい場合に使用する関数です。試す:

o.proj <- mapply(function(x,y){
  apply(x,3,function(z){
    t(y) %*% z
  })
}, somedata, somevectors, SIMPLIFY = FALSE)

SIMPLIFY = FALSEを使用してリストを返したいと思いますが、それ以外の場合mapplyは、出力を配列に単純化しようとしますsapply

Mapのショートカットとして使用できることも知っておいてくださいmapply(..., SIMPLIFY = FALSE)

于 2013-11-09T01:16:47.993 に答える