2012-09-22 72 views
10

在grep表達式中,當grep的值爲integer(0)時,打印「ok」,我該怎麼辦?如何處理R中返回整數(0)的grep失敗?

> 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 

回答

12

您可以使用lengthidentical

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" 
+0

如果你知道數據是單一值,你可以使用'if(grepl(「w」,data))'。在OPs的情況下以及在我的代碼中,現在也會發生這種情況...... – TMS

3

相反的grep,youcould使用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" 
+1

如果'data'的長度大於1,您將得到一個警告 – GSee

+2

@Gsee - 有效點,此時我可能會推薦使用'ifelse )'而不是你想要的矢量化解決方案......或者任何()',正如你所建議的那樣,巧妙地。儘管我在星期五不習慣讀書 - 這是OP的責任,想出一些代表他們問題的東西:) – Chase