2012-01-28 59 views
1

我有一个包含一系列表的R列表。列表中的每个表格都包含已命名的项目及其相应的值。我想遍历列表中的每个表并返回的多少在每个表中的项目有一个值== 1有条件地从R列表对象中选择表项

假设,例如,下面的列表计数:

someitems < - C( “中”, “猫”, “和”, “中”, “帽子”)

someotheritems < - C( “它”, “是”, “中”, “最佳” ,“的”,“时间”,“它”,“是”,“该”)

my.list < - list(someitems),table(someotherotherms))

my.list

[[1]] 
someitems 
and cat hat the 
    1 1 1 2 

[[2]] 
someotheritems 
best it of the times was 
    1  2  1  2  1  2 

我现在需要的是有一个值== 1列表中的每个表返回的项目数,

例如从上面的返回

3 
3 

我可以看到,如何通过循环做到这一点,但如何做到这一点没有循环?

我已经与lapply(试行),我知道如何在使用值获得:

lapply(my.list, '[') 

,我写了一个自定义函数用于检测项目== 1,例如

is.one <- function(x) if(x==1) return (TRUE) else return(FALSE) 

,但我不是很了解有把二者结合起来,而且应该是比使用这种无聊的功能更简单的方法。

谢谢!

回答

1

在学习如何做到这一点,是大有裨益的一个实例工作,然后对推广该方法的匿名函数使用lapply

> my.list[[1]] == 1 
someitems 
    and cat hat the 
TRUE TRUE TRUE FALSE 
> sum(my.list[[1]] == 1) 
[1] 3 
> lapply(my.list, function(x) sum(x == 1) ) 
[[1]] 
[1] 3 

[[2]] 
[1] 3 

如果你期望得到的结果是经常然后sapply可以返回值有时会降低到一个向量或矩阵:

sapply(my.list, function(x) sum(x == 1)) 
[1] 3 3 
+0

我知道这一定是简单的比我使之。谢谢! – litlogger 2012-01-29 18:03:13

1
library(plyr) 
count=ldply(my.list, function(x) length(which(x==1)))