从R中的列表列表中提取元素?

时间:2015-10-23 18:17:36

标签: r

我有以下格式的列表:

[[825]][[4]]

4个内部列表元素中的每一个都是不同大小和尺寸的数组:

[[1]]
 [1] 0.02918644 0.03239657 0.03560670 0.03881683 0.04202696 0.04523709 0.04844722 0.05165735
 [9] 0.05486748 0.05807761 0.06128774 0.06449787 0.06770800 0.07091813 0.07412827 0.07733840
[17] 0.08054853 0.08375866 0.08696879 0.09017892

[[2]]
 [1] 0.7581078 0.7587820 0.7608009 0.7641538 0.7688234 0.7747857 0.7820113 0.7904655 0.8001093
[10] 0.8109003 0.8244816 0.8444896 0.8706241 0.9023530 0.9391094 0.9803280 1.0254709 1.0740433
[19] 1.1256013 1.1797536

[[3]]
           [,1]       [,2]          [,3]
 [1,] 0.4177711 0.34606863  2.361603e-01
 [2,] 0.4345125 0.35491274  2.105747e-01
 [3,] 0.4512540 0.36375685  1.849892e-01
 [4,] 0.4679954 0.37260096  1.594036e-01
 [5,] 0.4847369 0.38144507  1.338180e-01
 [6,] 0.5014783 0.39028918  1.082325e-01
 [7,] 0.5182198 0.39913329  8.264693e-02
 [8,] 0.5349612 0.40797740  5.706137e-02
 [9,] 0.5517027 0.41682150  3.147581e-02
[10,] 0.5684441 0.42566561  5.890257e-03
[11,] 0.6059978 0.39400216  0.000000e+00
[12,] 0.6497759 0.35022414  0.000000e+00
[13,] 0.6935539 0.30644612  0.000000e+00
[14,] 0.7373319 0.26266811 -2.408519e-18
[15,] 0.7811099 0.21889009 -6.394265e-19
[16,] 0.8248879 0.17511207  1.129666e-18
[17,] 0.8686659 0.13133405  2.898758e-18
[18,] 0.9124440 0.08755604  4.667850e-18
[19,] 0.9562220 0.04377802  6.436942e-18
[20,] 1.0000000 0.00000000  0.000000e+00

[[4]]
            [,1]
 [1,] 0.03849906
 [2,] 0.04269549
 [3,] 0.04680160
 [4,] 0.05079714
 [5,] 0.05466400
 [6,] 0.05838658
 [7,] 0.06195207
 [8,] 0.06535055
 [9,] 0.06857498
[10,] 0.07162115
[11,] 0.07433489
[12,] 0.07637498
[13,] 0.07776951
[14,] 0.07859245
[15,] 0.07893464
[16,] 0.07889032
[17,] 0.07854784
[18,] 0.07798443
[19,] 0.07726429
[20,] 0.07643877

我希望有4个新列表,每个列表包含825个元素:

[[4]][[825]]

例如,应该合并825列表中的所有[[1]],[[2]]等。

最好的方法是什么?我一直试图用某种方式解决这个问题。

1 个答案:

答案 0 :(得分:2)

首先创建一个列表示例列表:

big.lst <- lapply(1:825, function(x) rep(list(rnorm(10)), 4))

#check lengths
length(big.lst)
#[1] 825
unique(lengths(big.lst))
#[1] 4

然后lapply大名单上的一个子集。我选择1:4创建了四个新组,但您可以使用1:length(big.lst[[1]])进行一般化,因为每个子列表具有相同的长度:

newlst <- lapply(1:4, function(x) lapply(big.lst, '[[', x))

#verify answer
length(newlst)
#[1] 4
unique(lengths(newlst))
#[1] 825