R中子集的动态条件

时间:2015-10-23 14:31:44

标签: r

我有一个如此定义的列表:

cond <- list(list(1), list(1, 2), list(1, 2, 3))

基于此cond列表,我想进行子集化。在一个简单的硬编码案例中,我这样做:

t1 <- subset(dat, group == 1)
t2 <- subset(dat, group == 1 | group == 2)
# etc

现在我想从这个硬编码的解决方案转变为动态解决方案。在伪代码中它看起来像这样:

ts <- list()
i <- 1
for(lst in cond){
   ts[i] <- subset(dat, group in lst) # <- This is what I want
   i <- i + 1
}

换句话说,我想转此:

group == 1 | group == 2    

到此:

group in lst

但我不确定如何真正实现这一点。

1 个答案:

答案 0 :(得分:3)

此处您不需要列表。像

这样的向量列表
gs <- list(1, 1:2, 1:3)

应该可以正常工作,然后是

ts <- lapply(gs, function(x) dat[dat$group %in% x, ])

根据subset的说明,我不能使用?subset

  

这是一种便于交互使用的便利功能。对于编程,最好使用标准的子集函数,如[,特别是参数子集的非标准评估可能会产生意想不到的后果。

相关问题