Hi R, Getting a strange result using ?apply. Please look into the below codes:>d=data.frame(a=c(1,2,3),b=c("A","B","C"),c=c(TRUE,FALSE,FALSE),d=c(T,F,F ))> class(d[,1])[1] "numeric"> class(d[,2])[1] "factor"> class(d[,3])[1] "logical"> class(d[,4])[1] "logical"> apply(d,2,class)a b c d "character" "character" "character" "character"> apply(d[,c(1,3)],2,class)a c "numeric" "numeric"> apply(d[,c(3,4)],2,class)c d "logical" "logical"> apply(d[,c(3,2)],2,class)c b "character" "character">Why is this so? How do I get the actual classes of columns of my dataframe d? Thanks, Shubha This e-mail may contain confidential and/or privileged i...{{dropped:13}}
G'day Shuba, On Thu, 15 May 2008 12:18:58 +0530 "Shubha Vishwanath Karanth" <shubhak at ambaresearch.com> wrote:> Getting a strange result using ?apply. Please look into the below > codes: > > d=data.frame(a=c(1,2,3),b=c("A","B","C"),c=c(TRUE,FALSE,FALSE),d=c(T,F,F)) > > > class(d[,1]) > > [1] "numeric" > > > class(d[,2]) > > [1] "factor" > > > class(d[,3]) > > [1] "logical" > > > class(d[,4]) > > [1] "logical" > > > apply(d,2,class) > > a b c d > > "character" "character" "character" "character"[....]> Why is this so??apply The first argument to apply is an *array*, not a data.frame. In an array, all elements have to be of the same type, so when your data.frame is coerced into an array the target type of the coercion depends on which components you select.> How do I get the actual classes of columns of my dataframe d?Something like: R> lapply(d, class) $a [1] "numeric" $b [1] "factor" $c [1] "logical" $d [1] "logical" could be used. HTH. Best wishes, Berwin =========================== Full address ============================Berwin A Turlach Tel.: +65 6515 4416 (secr) Dept of Statistics and Applied Probability +65 6515 6650 (self) Faculty of Science FAX : +65 6872 3919 National University of Singapore 6 Science Drive 2, Blk S16, Level 7 e-mail: statba at nus.edu.sg Singapore 117546 http://www.stat.nus.edu.sg/~statba