过滤并映射R中的列表

时间:2015-04-11 01:49:31

标签: r lapply

我可以使用lapply

在R中的列表上绘制地图
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中对列表进行折叠。

1 个答案:

答案 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"