问题 如何处理grep失败返回R中的整数(0)?


在grep表达式中,当grep的值为 integer(0),打印“确定”,我该怎么办?

> data="haha"
> grep("w",data)
integer(0)
> if (grep("w",data)==0) print ("ok")
Error in if (grep("w", data) == 0) print("ok") : 
  argument is of length zero

8782
2017-09-22 00:48


起源



答案:


你可以使用其中之一 length 要么 identical

R> if (length(grep("w", data)) == 0) print ("ok")
[1] "ok"

R> if (identical(grep("w", data), integer(0))) print ("ok")
[1] "ok"

你也可以使用 grepl 代替 grep

R> if (!any(grepl("w", data))) print('ok')
[1] "ok"

13
2017-09-22 00:53



如果您知道数据是单个值,则可以使用 if (grepl("w", data))。在OPs案例和我的代码中也会发生这种情况...... - TMS


答案:


你可以使用其中之一 length 要么 identical

R> if (length(grep("w", data)) == 0) print ("ok")
[1] "ok"

R> if (identical(grep("w", data), integer(0))) print ("ok")
[1] "ok"

你也可以使用 grepl 代替 grep

R> if (!any(grepl("w", data))) print('ok')
[1] "ok"

13
2017-09-22 00:53



如果您知道数据是单个值,则可以使用 if (grepl("w", data))。在OPs案例和我的代码中也会发生这种情况...... - TMS


代替 grep,你可以使用 grepl 返回逻辑:

> if (grepl("w",data)== FALSE) print ("ok") else print("donkeykong")
[1] "ok"


> if (grepl("h",data)== FALSE) print ("ok") else print("donkeykong")
[1] "donkeykong"

3
2017-09-22 00:54



如果 data 长度大于1,你会收到警告 - GSee
@Gsee - 有效点,此时我可能会建议使用 ifelse() 相反,如果你想要一个矢量化解决方案......或者 any() 如你所说,聪明。我不习惯周五的心灵阅读 - OP有责任提出代表他们问题的东西:) - Chase