error in if() argument is of length zero in R

5.1k Views Asked by At

This is the code

`

region<-"ARLINGTON"

data<-read.csv("city_markets.csv")

for(i in 1:length(data[[1]])){

if(grep(region,as.character(data[[3]][i]),ignore.case=TRUE)==1){

for(j in 1:length(data)){
    write(data[[j]][i],"analyzed.txt",append=TRUE)
  }   
}

} `

now what i'm trying to do here is I'm accessing the csv's column(3rd one) and comparing it with the region specified! i keep getting the error

Error in if (grep(region, as.character(data[[3]][i]), ignore.case = TRUE) == :

argument is of length zero

2

There are 2 best solutions below

1
On BEST ANSWER

To detail a bit my comment and @Adii_ 's :

when you use grep, the result is the "position" of elements that fulfill the condition... so "nothing" if there is no match (hence the error message).

Using grepl, you'll get TRUE or FALSE, which you can use in your if statement.

As for length(grep(...)), the result will be 0 if there is no match, corresponding to FALSE for the if statement, or a positive integer (1 in your case because you're testing only one element), if there is a match, corresponding to TRUE for the if statement.

0
On

this solved my problem:

region<-"ARLINGTON"

data<-read.csv("city_markets.csv")

for(i in 1:length(data[[1]])){

a<-as.character(data[[3]][i])

if(grepl(region,a,ignore.case=TRUE)){
for(j in 1:length(data)){
    write(data[[j]][i],"analyzed.txt",append=TRUE)
  }   
}

} `