5

mapply を使用して、データ フレームまたはマトリックス (df) のリストに適用する関数があります。関数は、元のデータ フレームの変換のいくつかの基準に基づいて、4 つの異なるタイプのデータ フレーム (例: a:d) を出力しますが、関数では 1 つしか出力できないため、問題が発生しています。それらをリストにまとめようとしましたが、単純化された関数を実行すると、これが得られます。

df1<-matrix(rnorm(10), nrow=10, ncol=10)
df2<-df1
df<-list(df1, df2)

func<-function (x) {
  a<-x*1
  b<-x*2
  c<-x*3
  d<-x*4
  return(list(a,b,c,d))
}

finalresult<-mapply(func, x=df)

str(finalresult)

List of 8
 $ : num [1:10, 1:10] -3.211 -0.121 -0.2 0.491 1.118 ...
 $ : num [1:10, 1:10] -6.422 -0.242 -0.4 0.982 2.235 ...
 $ : num [1:10, 1:10] -9.633 -0.362 -0.6 1.473 3.353 ...
 $ : num [1:10, 1:10] -12.844 -0.483 -0.8 1.964 4.471 ...
 $ : num [1:10, 1:10] -3.211 -0.121 -0.2 0.491 1.118 ...
 $ : num [1:10, 1:10] -6.422 -0.242 -0.4 0.982 2.235 ...
 $ : num [1:10, 1:10] -9.633 -0.362 -0.6 1.473 3.353 ...
 $ : num [1:10, 1:10] -12.844 -0.483 -0.8 1.964 4.471 ...
 - attr(*, "dim")= int [1:2] 4 2

この場合、df1 からの 4 つの出力データ フレーム (a:d) のリストが表示され、その直後に df2 からの次の出力セットが追加されていることがわかります。各データ フレーム変換がカテゴリ (例: finalresults$a) でアクセスできるリストに配置される出力が必要です。どんな助けでも大歓迎です!

ありがとう -チェルシー

4

2 に答える 2

5

どうですか:

使用しますmapplyが、単純化しないでください。

result1 <- mapply(func, x=df, SIMPLIFY=FALSE)

インデックスを反復処理します (これは、結果の両方のリストが同じ長さであることを前提としています)。インデックスごとiに、 を使用して各リストの th 要素をlapply取り出します。iresult1

 result2 <- lapply(seq_along(result1[[1]]),
              function(i) lapply(result1,"[[",i))

これをさらに短縮/難読化しようとしました(つまり、匿名関数を定義する必要がなくなりました)が、ネストされたlapplys では、それを機能させる方法がわかりません。

于 2014-01-12T05:17:14.253 に答える
1

これがあなたが望むものを与える解決策です。基本的に、リストが返す名前に名前を付けてから、名前で集計します。

df1<-matrix(rnorm(10), nrow=10, ncol=10)
df2<-df1
df<-list(df1, df2)
namesToReferTo = letters[1:4]
func<-function (x) {
  a<-x*1; b<-x*2; c<-x*3; d<-x*4
  retList = list(a,b,c,d)
  names(retList)=namesToReferTo
  return(retList)
}
finalresult = lapply(namesToReferTo, function(y) { lapply(lapply(df,func), function(x) { x[[y]] }) } )
# alternatively: finalresult = lapply(namesToReferTo, function(y) { Map(function(x) { return(x[[y]])} , lapply(df,func)) } )
names(finalresult) = namesToReferTo
str(finalresult)
finalresult$b
于 2014-01-12T04:24:39.827 に答える