It can be explained. > class(A) [1] "data.frame" > length(A) [1] 5 > class(A==0) [1] "matrix" > length(A==0) [1] 10 > class(-A*log(A)) [1] "data.frame" > length(-A*log(A)) [1] 5
as you can see, the result of A==0 is matrix with length=10, while the result of -A*log(A) is still data.frame with length=5. then, when calling ifelse( [length=10], 0, [length=5] ), internally, the NO(3rd) argument was repeated by rep(-A*log(A),length.out=10) (try this). the result is "list" with length=10 and each element has 2 sub-elements. So, the return value of A[(A==0)==FALSE] has 2 sub-elements as you get. I think what confusing you is the behavior of A==0. However, when using 'ifelse', I think you should use matrix as the arguments because data.frame is not consistent with the purpose of 'ifelse'. On 1/5/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > [Using R 2.2.0 on Windows XP; OK, OK, I will update soon!] > > I have noticed some undesirable behaviour when applying > ifelse to a data frame. Here is my code: > > A <- scan() > 1.000000 0.000000 0.000000 0 0.00000 > 0.027702 0.972045 0.000253 0 0.00000 > > A <- matrix(A,nrow=2,ncol=5,byrow=T) > A == 0 > ifelse(A==0,0,-A*log(A)) > > A <- as.data.frame(A) > ifelse(A==0,0,-A*log(A)) > > and this is the output: > > > A <- scan() > 1: 1.000000 0.000000 0.000000 0 0.00000 > 6: 0.027702 0.972045 0.000253 0 0.00000 > 11: > Read 10 items > > A <- matrix(A,nrow=2,ncol=5,byrow=T) > > A == 0 > [,1] [,2] [,3] [,4] [,5] > [1,] FALSE TRUE TRUE TRUE TRUE > [2,] FALSE FALSE FALSE TRUE TRUE > > ifelse(A==0,0,-A*log(A)) > [,1] [,2] [,3] [,4] [,5] > [1,] 0.00000000 0.00000000 0.000000000 0 0 > [2,] 0.09934632 0.02756057 0.002095377 0 0 > > > > A <- as.data.frame(A) > > ifelse(A==0,0,-A*log(A)) > [[1]] > [1] 0.00000000 0.09934632 > > [[2]] > [1] NaN 0.02756057 > > [[3]] > [1] 0 > > [[4]] > [1] NaN NaN > > [[5]] > [1] 0 > > [[6]] > [1] 0.00000000 0.09934632 > > [[7]] > [1] 0 > > [[8]] > [1] 0 > > [[9]] > [1] 0 > > [[10]] > [1] 0 > > > > > Is this a bug or a feature? Can the behaviour be explained? > > Regards, Murray Jorgensen > -- > Dr Murray Jorgensen http://www.stats.waikato.ac.nz/Staff/maj.html > Department of Statistics, University of Waikato, Hamilton, New Zealand > Email: [EMAIL PROTECTED] Fax 7 838 4155 > Phone +64 7 838 4773 wk Home +64 7 825 0441 Mobile 021 1395 862 > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.