подмножество списка векторов с grep? - PullRequest
2 голосов
/ 16 июня 2019

У меня есть список векторов, и я хочу создать новый список, содержащий любое значение, содержащее букву «а», но сохраняющее внутреннюю структуру.

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

, в свою очередь, предоставляет номер индекса, но я хочу, чтобы он возвращал значения.Конечным результатом должен быть список с вектором g1, содержащий a и ca, а g2 только с a.

спасибо!

Ответы [ 3 ]

2 голосов
/ 16 июня 2019

Добавить value = TRUE.

lapply(l, function(x)  grep('a', x, value = TRUE))
# $g1
# [1] "a"  "ca"
# 
# $g2
# [1] "a"
1 голос
/ 16 июня 2019

В качестве альтернативы вы можете сделать:

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

$g1
[1] "a"  "ca"

$g2
[1] "a"
0 голосов
/ 16 июня 2019

Если вы хотите попробовать с 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.
...