2017-08-28 14 views
0

同じ次元の行列のリストがある場合、どのようにしてRの行列のリストの各要素を得ることができますか?例えば、私は4つの行列を持つ:行列のリストの各要素のパーセンタイルを得る方法

> a 
      [,1]  [,2]  [,3] 
[1,] -0.8761453 0.2821336 -0.8541406 
[2,] -0.9649200 1.7734091 -1.2058440 
[3,] -0.4250063 -0.8197162 -1.3997540 
> b 
      [,1]  [,2]  [,3] 
[1,] -1.2096577 -0.5440074 0.6102016 
[2,] -0.1299645 -0.8943189 -1.8042720 
[3,] 1.0111488 0.2547343 0.2395172 
> c 
      [,1]  [,2]  [,3] 
[1,] 0.2853833 -0.2716714 0.2330467 
[2,] -0.7963095 -1.2120779 0.6909755 
[3,] 0.3479346 0.1803124 -0.7400176 
> d 
      [,1]  [,2]  [,3] 
[1,] -1.048740842 -1.0492152 -0.6889409 
[2,] -0.004154795 -0.6167335 -0.8028550 
[3,] -1.111915258 -2.1586534 -0.1448612 

私は各要素の少なくとも第二最小にしたい場合は、私が望む結果があります。

> res 
      [,1]  [,2]  [,3] 
[1,] -1.0487408 -0.5440074 -0.6889409 
[2,] -0.7963095 -0.8943189 -1.2058440 
[3,] -0.4250063 -0.8197162 -0.7400176 
+0

入力に基づいて予想される出力を表示できますか? – akrun

+0

期待される出力を追加しました。コメントありがとう! – Tian

+0

これに基づいて追加された解決策 – akrun

答えて

2

我々が第2の最小値が必要な場合は、一緒にmatrix ESを連結しarrayを作成し、寸法を指定し、必要MARGINapplyを使用し、sort最小から最大の要素と第二要素

を得ます
apply(array(c(a, b, c, d), c(dim(a), 4)), c(1, 2), FUN = function(x) sort(x)[2]) 
#   [,1]  [,2]  [,3] 
#[1,] -1.0487408 -0.5440074 -0.6889409 
#[2,] -0.7963095 -0.8943189 -1.2058440 
#[3,] -0.4250063 -0.8197162 -0.7400176 

注:OPのポストに基づき、地球環境における個別のmatrixオブジェクトである 'D'、 'A'、 'B'、 'C​​' のように見える

+1

パッケージWGCNAは、並列処理を使用してこのジョブを迅速に実行できる優れた機能 "pquantile"を提供します。あなたの素晴らしいソリューションをありがとう! – Tian

関連する問題