2012-09-22 25 views
10

grep ifadesinde, grep değeri integer(0) olduğunda, yazdırma "tamam", nasıl yapabilirim?Grep başarısızlığı, tamsayı (0) R?

> 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 

cevap

12

Bir mantıksal döndürür grepl kullanmak youcould ya length veya

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

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

Ayrıca grepl yerine yerine grep ait grep

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

Verilerin tek bir değer olduğunu biliyorsanız, 'if (grepl (" w ", data))' işlevini kullanabilirsiniz. OP'ler durumunda ve şimdi benim kodumda olan ... – TMS

3

ait kullanabilirsiniz kullanabilirsiniz:

> 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

eğer 'data' 1'den büyükse, – GSee

+2

@Gsee - geçerli bir noktayı alırsınız, bu noktada muhtemelen ifelse kullanmanızı öneririm) 'yerine, size önerildiğiniz gibi, bir vectorized çözüm ... veya' any() 'istiyorsan zekice. Cuma günleri zihin okuma alışkanlığı içinde değilim - sorunlarının temsilcisi bir şey ile gelmek OP'nin sorumluluğundadır :) – Chase