1

各フレームの行数は異なるが列数は同じである27個のデータフレームのリストがあります(22)。各フレームのベクトルに各列の最小値、最大値、中央値を入れる必要があります。結果は次のようになります。

frame1 =(c1min、c1max、c1median、c2min、c2max、c2median ... c22min、c22max、c22median)

frame2 =(c1min、c1max、c1median、c2min、c2max、c2median ... c22min、c22max、c22median)

..。

frame27 =(c1min、c1max、c1median、c2min、c2max、c2median ... c22min、c22max、c22median)

これを実行して、各列の最小値を生成しました。

> all_min = lapply(all_list, function(x){apply(x,2,min)})

ここで、「all_list」は私のリストであり、「all_min」はリスト内のすべての列の分に対するベクトルです。ベクトルの番号付きリストを取得する方法(上記の例のように)、およびそれらを適切にフォーマットする方法がわかりません。何か案は?

編集:これはフレームの1つの例です:

          lx        ly        lz   ...
1  -0.039256 -0.078644 -0.032388 
2  -0.036041 -0.074536 -0.033906 
3  -0.033898 -0.071544 -0.033906
4

1 に答える 1

3

再現性のあるデータFTW。

とにかく、ここに推測があります:

lapply( all_list, function(dat) {
   sapply( c(min,max,median), function(fn) apply(dat,2,fn) )
}) 

ただし、サンプルデータがないとテストするのは困難です。

これは、関数を引数としてsapplyに渡すことで機能します。Rにとって「すべてがオブジェクト」である多くの方法の1つ。

lapplyの各要素all_list(この場合はdata.frame)を受け取り、それを指定された関数の最初の引数として渡します。その関数の最初の引数はdatであるため、その関数が実行されるたびにdata.frameが呼び出されます(たとえば、に含まれる各data.frameに対してall_list)。

その後、sapplyのように動作lapplyしますが、可能であればいくつかのかわいいアレンジを行います。したがって、関数のベクトルを取り、c(min,max,median)それらを関数の最初の引数に順番に割り当てます。その関数の最初の引数はfnであるため、実行されるたびに各関数が呼び出されます。涼しい。

これで、呼び出された単一のdata.frameとall_listと呼ばれるdat単一の関数fnに対して、最初に設定したことを実行する単純な関数ができました。その要約関数をdata.frameの各列に適用します。

最後のステップは、sapplyその魔法を使って、出力がきちんとした形式の行列を返すことです。次にlapply、そのマトリックスをリストの要素として含め、最終的にはそれを返します。

于 2012-12-10T17:23:13.550 に答える