2012-01-28 60 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)))