R:为什么可以';t代表循环还是c()代表grep函数?
谢谢你,我也解决了自己的问题。 这里的问题是如何使用grep函数找到多个值, 解决方案是:R:为什么可以';t代表循环还是c()代表grep函数?,r,R,谢谢你,我也解决了自己的问题。 这里的问题是如何使用grep函数找到多个值, 解决方案是: grep("A1| A9 | A6") 或 toMatch考虑一下: XXX <- c("a", "b", "XXX[i]") grep("XXX[i]", XXX, value=T) character(0) grep("XXX\\[i\\]", XXX, value=T) [1] "XXX[i]" 正如评论所指出的,grep(c(“A1”、“A2”、“A3”),m))违反了grep所需的语
grep("A1| A9 | A6")
或
toMatch考虑一下:
XXX <- c("a", "b", "XXX[i]")
grep("XXX[i]", XXX, value=T)
character(0)
grep("XXX\\[i\\]", XXX, value=T)
[1] "XXX[i]"
正如评论所指出的,grep(c(“A1”、“A2”、“A3”),m))
违反了grep
所需的语法。来自grep()函数中模式=
参数的文档:
包含要在给定字符向量中匹配的正则表达式(或fixed=TRUE
的字符串)的字符串。如果可能,由强制为.character
为字符串如果提供长度为2或更长的字符向量,则第一个元素将与警告一起使用。除了regexpr
和gregexpr
之外,允许缺少值
这证实了,@nrussell在一篇评论中说,grep()
没有在模式参数上进行向量化。因此,c()
不能用于正则表达式列表
但是,您可以使用循环,只需修改语法即可
toMatch <- c("A1", "A9", "A6")
# Loop over values to match
for (i in toMatch) {
grep(i, text)
}
然而,最好的方法是,正如你在帖子中已经提到的那样,使用
matches <- unique(grep(paste(toMatch, collapse = "|"), text))
匹配grep(c(“A1”、“A2”、“A3”),m))
不起作用,因为grep
未在模式
参数上矢量化-它必须是单个正则表达式grep(“XXX[i]”,m))
不起作用,因为在XXX[i]
周围有引号,所以它被解释为字符串文字,而不是作为对象计算。您能显示一些输入和输出吗?您是否考虑过Vectorize
函数?grep(c(“A1”、“A2”、“A3”),m))
违反了grep语法grep(pattern,x,…
。pattern必须是一个字符串,您提供了一个由三个字符串组成的向量。另一种说法是长度(pattern)
应该是1
。另外,函数(m)grep(“XXX[i]”,m))
在“XXX[i]”之后有一个放错位置的闭合偏旁。再次检查grep及其示例的文档。
for (i in XXX){
find.explore.l<-lapply(text.words.bl ,function(m) grep("XXX[i]"),m))
.......(more lines to append lines etc)
}
XXX <- c("a", "b", "XXX[i]")
grep("XXX[i]", XXX, value=T)
character(0)
grep("XXX\\[i\\]", XXX, value=T)
[1] "XXX[i]"
#if you want the match returned
matches <- c("a", "b")
for (i in matches) print(grep(i, XXX, value=T))
[1] "a"
[1] "b"
#if you want the vector location of the match
for (i in matches) print(grep(i, XXX))
[1] 1
[1] 2
toMatch <- c("A1", "A9", "A6")
# Loop over values to match
for (i in toMatch) {
grep(i, text)
}
lapply(toMatch, function(rgx, text) grep(rgx, text), text = text)
matches <- unique(grep(paste(toMatch, collapse = "|"), text))