表函数列表的元素

时间:2013-01-17 11:15:43

标签: r

我有一个如下所示的列表:

  

列出[[1]]

 GN  SN1  SN2      
  a   0    0      
  b   1    1     
  c   0    0    
  e   2    2     
  f   0    1    
  d   0    0
     

列出[[2]]

 GN  SN1  SN2      
  e   0    1      
  f   2    0     
  g   1    1    
  h   2    0     
  i   1    0    
  l   3    0

我想: 将“table”函数应用于列表的每个元素(因此对于每个列表[[1]],列出[[2]],...)首先按列,然后按行使用例如这样的结构:apply (list,1,table)(lapply for lists)或apply(list,2,table)以相同的方式按行和按列相加。

任何人都可以帮助我吗?

提前致谢,

1 个答案:

答案 0 :(得分:5)

可能是这样的......

lapply(List, apply, 1, table) # table by row
lapply(List, apply, 2, table) # table by cols

输出效果不错。

更好的输出可能是:

list1 <- lapply(List, apply, 1, table) # table by row
list2 <- lapply(List, apply, 2, table) # table by cols

> # for list1
> lapply(list1, unlist) # output is a list
[[1]]
0 a 1 b 0 c 2 e 0 1 f 0 d 
2 1 2 1 2 1 2 1 1 1 1 2 1 

[[2]]
0 1 e 0 2 f 1 g 0 2 h 0 1 i 0 3 l 
1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 


> # for list2
> library(abind)
> # using abind function from abind package
> abind(lapply(list2, unlist), along=0)  # output is an array
     GN.e GN.f GN.g GN.h GN.i GN.l SN1.0 SN1.1 SN1.2 SN1.3 SN2.0 SN2.1
[1,]    1    1    1    1    1    1     4     1     1     3     2     1
[2,]    1    1    1    1    1    1     1     2     2     1     4     2

> # R base solution
> do.call(rbind, lapply(list2, unlist)) # output is an array
     GN.a GN.b GN.c GN.d GN.e GN.f SN1.0 SN1.1 SN1.2 SN2.0 SN2.1 SN2.2
[1,]    1    1    1    1    1    1     4     1     1     3     2     1
[2,]    1    1    1    1    1    1     1     2     2     1     4     2