我正在尝试使用grepl
在文本中搜索模式。问题是我的模式是一个名单列表,我的文本也是一个相同长度的文本列表。我想建立一个遍历每一行并在相应文本中搜索给定名称的循环。
修改
例如,在这个数据中:
pat <- c("mary", "john", "anthony")
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary").
我想在第一个文本中搜索"mary"
,然后在第二个文本中搜索"john"
,最后在第三个文本中搜索"anthony"
。
答案 0 :(得分:6)
pat <- c("mary", "john", "anthony")
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary")
Map
或mapply
函数将执行此操作:
Map(grepl,pat,text)
(这会返回一个列表,您可以unlist
)
或
mapply(grepl,pat,text)
(自动简化)或
n <- length(pat)
res <- logical(n)
for (i in seq(n)) {
res[i] <- grepl(pat[i],text[i])
}
答案 1 :(得分:4)
使用新的样本数据,您可以:
pat <- c("mary", "john", "anthony")
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary")
sapply(1:length(pat), function(x) grepl(pat[x],text[x]))
返回:
[1] FALSE TRUE FALSE
希望这有帮助。
答案 2 :(得分:2)
另一种选择是使用Vectorize
Vectorize(grepl)(pattern = pat, x = text, ignore.case = TRUE)
# mary john anthony
# FALSE TRUE FALSE