Как и в случае с другими, я не совсем уверен, что вы получаете/за какие цели, но как насчет использования Vectorize
для создания «векторизованной» версии grep
?
Вот небольшой воспроизводимый пример. Мы начнем с некоторых данных образца ... вектора «d», который содержит то, что мы хотим найти, и другого вектора «x», который содержит то, что мы хотим посмотреть.
d <- c(1,2,3,4,5)
set.seed(1)
x <- paste0(letters[1:2], sample(5, 10, replace = TRUE))
x
# [1] "a2" "b2" "a3" "b5" "a2" "b5" "a5" "b4" "a4" "b1"
Нам нужно только векторизации "pattern"
аргумент grep
:
vGrep <- Vectorize(grep, vectorize.args = "pattern", SIMPLIFY = FALSE)
Теперь мы можем использовать эту новую функцию так же, как мы будем использовать grep
:
vGrep(d, x)
# [[1]]
# [1] 10
#
# [[2]]
# [1] 1 2 5
#
# [[3]]
# [1] 3
#
# [[4]]
# [1] 8 9
#
# [[5]]
# [1] 4 6 7
#
vGrep(d, x, value = TRUE)
# [[1]]
# [1] "b1"
#
# [[2]]
# [1] "a2" "b2" "a2"
#
# [[3]]
# [1] "a3"
#
# [[4]]
# [1] "b4" "a4"
#
# [[5]]
# [1] "b5" "b5" "a5"
#
Вы хотите найти должность? Или, если он существует? Не цитируйте '' i "', используйте его как переменную и, вероятно, вы хотите, чтобы 'whcih()' или 'match()' находили позицию в векторе. то есть 'which (i == d)' или 'match (i, d)' в зависимости от требований. –