带有grep的向量列表的子集?

subset of list of vector with grep?

我有一个矢量列表,我想创建一个新列表,其中包含包含字母 'a' 但保留内部结构的任何值。

l = list ( g1 = c('a','b','ca') , 
            g2 = c('a','b') )
lapply(l, function(x)  grep('a',x)  )

lapply on 提供了索引号,但我希望它 return 是值。 最终结果应该是一个列表,其中向量 g1 包含 a 和 ca,而 g2 仅包含 a。

谢谢!

添加value = TRUE.

lapply(l, function(x)  grep('a', x, value = TRUE))
# $g1
# [1] "a"  "ca"
# 
# $g2
# [1] "a"

或者,您可以这样做:

lapply(l, function(x)  x[grepl("a", x)])

$g1
[1] "a"  "ca"

$g2
[1] "a"

如果您想尝试 tidyverse,这里有两种方法。

library(tidyverse)
map(l, ~grep('a', .x, value=T))
map(l, ~str_subset(.x, 'a')) # str_subset from stringr package is a wrapper for grep shown above.