问题
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
回答1:
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.
回答2:
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)
}
}
} `
来源:https://stackoverflow.com/questions/27015180/error-in-if-argument-is-of-length-zero-in-r