我有一个如此定义的列表:
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
但我不确定如何真正实现这一点。
答案 0 :(得分:3)
此处您不需要列表。像
这样的向量列表gs <- list(1, 1:2, 1:3)
应该可以正常工作,然后是
ts <- lapply(gs, function(x) dat[dat$group %in% x, ])
根据subset
的说明,我不能使用?subset
:
这是一种便于交互使用的便利功能。对于编程,最好使用标准的子集函数,如[,特别是参数子集的非标准评估可能会产生意想不到的后果。