除了循环之外,还有一种优雅的方法来测试是否在短语中找到属于列表的单词?
我正在思考类似apply
函数之一的列表理解。
例如:
words <- c("word1", "word2", "word3")
text <- "This is a text made off of word1 and possibly word2 and so on."
如果任何单词是以文本形式建立的,那么输出应该返回TRUE。
答案 0 :(得分:6)
grepl
救援。
sapply(words, grepl, text)
# word1 word2 word3
# TRUE TRUE FALSE
依次考虑words
的每个元素,如果单词出现在TRUE
中,则返回逻辑(text
,如果没有,则返回FALSE
。)< / p>
如果您想确保找到完全字样,那么您可以使用:
sapply(words, function(x) grepl(sprintf('\\b%s\\b', x), text))
当文字有word1
但缺少TRUE
时,这会阻止sword123
返回word1
。如果words
具有多字元素,则可能没什么意义。
答案 1 :(得分:2)
查看包stringr
。
我认为您需要使用的功能是str_detect
或str_locate_all
。这是在sapply
中包含此功能。
库(stringr)
str_detect(text,words)
str_locate_all(text,words)