简体   繁体   中英

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

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

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.

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

} `

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM