Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

warning message in mean.default argument is not numeric or logical returning na but my vector is numeric

Tags:

r

i am running this R code to import a lot of csv file and calculate one mean of a numerico vector (nitrate) for all the datasets filtering by some values of an integer vector, ID.

setwd("C:/Users/americo/Documents/Documenti_2_0/Education/Data science/Coursera/R programming/rworkingdir/specdata")
lista_tot1 = list.files(pattern="*.csv");
lista_tot2 = lapply(lista_tot1, read.csv, sep = ",")#stampa tutti i csv                                  
lista_tot3<-do.call("rbind", lista_tot2)
lista_tot<-lista_tot3[is.element(lista_tot3$ID, 3:4),]
media<-mean(lista_tot$nitrate, na.rm=TRUE)
media

and it works.

But if i try to write this function, which seems similar to me:

pollutantmean <- function(directory, pollutant, id = 1:332) {
  setwd(directory)
  lista_tot1 = list.files(pattern="*.csv");
  lista_tot2 = lapply(lista_tot1, read.csv, sep = ",")  
  lista_tot3<-do.call("rbind", lista_tot2)
  lista_tot<-lista_tot3[is.element(lista_tot3$ID, id),]
  media<-mean(lista_tot$pollutant), na.rm=TRUE)
  return(media)
}

and then

media1<-pollutantmean("C:/Users/americo/Documents/Documenti_2_0/Education/Data science/Coursera/R programming/rworkingdir/specdata","nitrate", 3:4)

it then returns to me the message:

warning message in mean.default argument is not numeric or logical returning na 

...but my vector is numeric

that really doesn't make sense to me. if i ask to return of the structure of the last dataset, lista_tot, nitrate is still numeric.

I really don't know what to do, if some very experienced user could help me i would be extremely grateful.

like image 856
user3728428 Avatar asked Jun 11 '14 04:06

user3728428


1 Answers

Change this:

media<-mean(lista_tot$pollutant), na.rm=TRUE)

to this:

media<-mean(lista_tot[[pollutant]], na.rm=TRUE)

because the "$" does not evaluate it's argument. In this case "pollutant" is not a column name so you need an extraction function that will evaluate what the named object, pollutant, is "carrying" (namely the column name, "nitrate")to get the proper extraction from the dataframe.

like image 56
IRTFM Avatar answered Oct 20 '22 00:10

IRTFM