Как alexwhan говорит, grep
функция для использования. Однако, будьте осторожны об использовании его со списком. Это не делает то, что вы можете себе представить. Например:
grep("c", z)
[1] 1 2 3 # ?
grep(",", z)
[1] 1 2 3 # ???
То, что происходит за кулисами, что grep
принуждают его 2-й аргумент характера, используя as.character
. Когда применяется к списку, то, что возвращает as.character
, представляет собой представление символа из этого списка как получено путем deparsing его. (Modulo unlist.)
as.character(z)
[1] "c(\"a\", \"b\", \"c\")" "c(\"b\", \"d\", \"e\")" "c(\"a\", \"e\", \"f\")"
cat(as.character(z))
c("a", "b", "c") c("b", "d", "e") c("a", "e", "f")
Это то, что grep
работает над.
Если вы хотите запустить grep
в списке, более безопасным способом является использование lapply
. Это возвращает другой список, который вы можете использовать, чтобы извлечь интересующее вас.
res <- lapply(z, function(ch) grep("a", ch))
res
[[1]]
[1] 1
[[2]]
integer(0)
[[3]]
[1] 1
# which vectors contain a search term
sapply(res, function(x) length(x) > 0)
[1] TRUE FALSE TRUE
Хорошее объяснение, хорошая точка – alexwhan
Спасибо за этот ввод. Я обязательно буду помнить об этом в следующем проекте, где, вероятно, буду делать что-то подобное, но метод alexwhan подходит для моих целей достаточно хорошо, и он уже запущен. – riders994
Ответ Хонга велик. Просто добавьте немного функциональности для того, что это стоит. Чтобы получить только сами хиты, используйте это: 'unlist (lapply (z, function (ch) grep (" a ", ch, value = TRUE)))' –