Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:为什么可以';t代表循环还是c()代表grep函数?_R - Fatal编程技术网

R:为什么可以';t代表循环还是c()代表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函数找到多个值, 解决方案是:

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))