[Rd] apply on data.frame does not work properly (PR#859)
Peter Dalgaard BSA
p.dalgaard@pubhealth.ku.dk
02 Mar 2001 18:40:17 +0100
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't
This 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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._