2013-03-26 98 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