2013-03-26 202 views
3

我有一個代表事件源自2個樣品,「A」和「B」的載體命名列表:選擇列表元素

l.temp <- list(
SF1_t_A = c(rep(1:10)), 
SF2_t_A = c(rep(9:15)), 
SF1_t_B = c(rep(8:12))) 

l.temp 
$SF1_t_A 
[1] 1 2 3 4 5 6 7 8 9 10 

$SF2_t_A 
[1] 9 10 11 12 13 14 15 

$SF1_t_B 
[1] 8 9 10 11 12 

現在我想只選擇列表中的元素來自樣本「A」或「B」。我可以用循環來做這件事,但是當plyr在附近時,這種做法無視了使用列表的要點。這和變化,是我到目前爲止已經試過:

llply(l.temp , function(l){ 
    if ((unlist(strsplit(names(l), "_"))[3]) == "A"){ 
       return(l)} 

}) 

這是我收到的錯誤:

Error in unlist(strsplit(names(l), "_")) : 
    error in evaluating the argument 'x' in selecting a method for function 'unlist': 
Error in strsplit(names(l), "_") : non-character argument 

說明什麼我做錯了讚賞。

回答

5

您可以在列表中找到的名稱模式,它給你哪些的索引:

grep("_A$", names(l.temp)) 

,然後用它來子集:

l.temp[grep("_A$", names(l.temp))] 
+1

可能'_A $' (以避免選擇樣品AA,如果存在的話)。 – Arun 2013-03-26 19:51:40

+0

這太荒唐了,謝謝@mdsummer。我覺得我的過於複雜的方法非常愚蠢。 – fridaymeetssunday 2013-03-26 19:54:59

+0

yep,Arun - 編輯感謝 – mdsumner 2013-03-26 19:57:03