Увеличение списка внутри для l oop возвращает NA - PullRequest
2 голосов
/ 06 августа 2020

Я хотел бы вернуть некоторые индексы, используя a для l oop, и прямо сейчас l oop возвращает только NA.

df <- data.frame(v1 = c("a", "b", "c", "d", "e"),
                 v2 = c("f", "g", "h", "i", "j"),
                 v3 = c("aa", "bb", "cc", "bb", "dd"))

vec <- c("aa", "bb", "ee")

res <- list()


for (i in(vec)){
 temp <- vec[i]
 res[[i]] <- grep(temp, df[,3])
}

дает

res

$aa
[1] NA NA NA NA NA

$bb
[1] NA NA NA NA NA

$ee
[1] NA NA NA NA NA

пока я борюсь за это

res

$aa
[1] 1

$bb
[1] 2 4

$ee
[1]

Что это за очень простая вещь, о которой я не знаю?

Ответы [ 2 ]

3 голосов
/ 06 августа 2020

Мы можем использовать от lapply до l oop над вектором pattern, вызвать grep указать аргумент 'x' как столбец 'v3'

lapply(vec, grep, x = df$v3)

Или используйте анонимный вызов функции

lapply(vec, function(pat) grep(pat, df$v3))

list res может быть инициализировано в сообщении OP как

res <- vector('list', length(vec))

, затем l oop в последовательности 've c'

for (i in seq_along(vec)){
   temp <- vec[i]
   res[[i]] <- grep(temp, df[,3])
  }
2 голосов
/ 06 августа 2020
df <- data.frame(v1 = c("a", "b", "c", "d", "e"),
                 v2 = c("f", "g", "h", "i", "j"),
                 v3 = c("aa", "bb", "cc", "bb", "dd"))

vec <- c("aa", "bb", "ee")

sapply(vec, grep, df$v3)
#> $aa
#> [1] 1
#> 
#> $bb
#> [1] 2 4
#> 
#> $ee
#> integer(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...