【问题标题】:Select list element based on their name根据名称选择列表元素
【发布时间】:2013-03-26 19:47:38
【问题描述】:

我有一个命名的向量列表,代表源自 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 出现时,这有点违背了使用 list 的意义。到目前为止,这是我尝试过的方法和变体:

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

感谢帮助我做错了什么。

【问题讨论】:

    标签: r list


    【解决方案1】:

    您可以在列表的名称中找到该模式,它会为您提供一个索引:

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

    然后用它来子集化:

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

    【讨论】:

    • 可能是_A$(以避免选择样本AA,如果存在的话)。
    • 这非常简单,谢谢@mdsummer。我为自己过于复杂的方法感到非常愚蠢。
    • @fridaymeetssunday 是的,很容易错过简单的东西,plyr 等功能强大,但是 R 的基本索引有很多功能,按名称、数字和逻辑进行排序,这对理解非常重要
    猜你喜欢
    • 2021-05-13
    • 2013-09-17
    • 2013-10-11
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多