sergei@stams.strath.ac.uk
2001-Mar-02 17:14 UTC
[Rd] apply on data.frame does not work properly (PR#859)
Full_Name: Dr. Sergei Zuyev Version: 1.1.0 and 1.2.2 OS: Solaris Submission from: (NULL) (130.159.248.36) apply on data.frame with floats, factors and NA's does not work properly. Here is an example: I am searching for rows containig NA values. X1 <- c(1, NA) X2<-c("A","B") df<-data.frame(X1,X2) apply(df,1,function(x){any(is.na(x))}) # gives # 1 2 # FALSE TRUE # as it should # But: X1 <- c(1.5, NA) # float instead of natural df<-data.frame(X1,X2) apply(df,1,function(x){any(is.na(x))}) # gives # 1 2 # FALSE FALSE # as it shouldn't # However, apply(df[2,],1,function(x){any(is.na(x))}) # gives TRUE # Change X2 to a numeric vector and everything works fine: X2<-c(2.5,3) df<-data.frame(X1,X2) apply(df,1,function(x){any(is.na(x))}) # gives # 1 2 # FALSE TRUE # as it shouldn't -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Peter Dalgaard BSA
2001-Mar-02 17:40 UTC
[Rd] apply on data.frame does not work properly (PR#859)
sergei@stams.strath.ac.uk writes:> Full_Name: Dr. Sergei Zuyev > Version: 1.1.0 and 1.2.2 > OS: Solaris > Submission from: (NULL) (130.159.248.36) > > > apply on data.frame with floats, factors and NA's does not work properly. Here > is > an example: > I am searching for rows containig NA values. > > X1 <- c(1, NA) > X2<-c("A","B") > df<-data.frame(X1,X2) > apply(df,1,function(x){any(is.na(x))}) > # gives > # 1 2 > # FALSE TRUE > # as it should > > # But: > X1 <- c(1.5, NA) # float instead of natural > df<-data.frame(X1,X2) > apply(df,1,function(x){any(is.na(x))}) > # gives > # 1 2 > # FALSE FALSE > # as it shouldn't > > # However, > apply(df[2,],1,function(x){any(is.na(x))}) > # gives TRUE > > # Change X2 to a numeric vector and everything works fine: > X2<-c(2.5,3) > df<-data.frame(X1,X2) > apply(df,1,function(x){any(is.na(x))}) > # gives > # 1 2 > # FALSE TRUE > # as it shouldn'tThis traces back to the use of format() when coercing dataframes to character:> format(c(1,NA))[1] " 1" "NA"> format(c(1000,NA))[1] "1000" " NA" And " NA" is not a character NA.... apply(is.na(df),1,any) seems to be better though. -- O__ ---- Peter Dalgaard Blegdamsvej 3 c/ /'_ --- Dept. of Biostatistics 2200 Cph. N (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._