我可以使用lapply
lapply(1:10,function(y) { if (y %% 2 == 0) {y+42}})
(这给了我1到10之间的列表,其中每个其他对象都是NULL)。
此外,我可以使用Filter
删除每个NULL对象:
Filter(function(x) !is.null(x),
lapply(1:10,function(y) { if (y %% 2 == 0) {y+42}}))
(这给我一个1到10之间偶数的列表)。
另一个例子,假设我们想要获取一个字符串列表,并过滤掉所有以“a”开头的字符串,然后将“Foo”附加到剩余的字符串中。可以使用类似的技术:
Filter(function(x) !is.null(x),
lapply(c("foo","abar","baz"),
function(y) { if (grepl("^a",y)) {paste("foo",y)}}))
是否有更好的方法在R中对列表进行折叠。
答案 0 :(得分:1)
你可以尝试
y <- 1:10
as.list(y[y%%2==0]+42)
grep
也可以在向量
grepl(paste(c(2,4,6), collapse="|"), y)
#[1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
y1 <- letters[1:10]
paste('foo', y1[grepl('^a', y1)])
#[1] "foo a"