[R] ifelse on data frames
maj at stats.waikato.ac.nz
maj at stats.waikato.ac.nz
Fri Jan 5 04:18:00 CET 2007
[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: maj at waikato.ac.nz Fax 7 838 4155
Phone +64 7 838 4773 wk Home +64 7 825 0441 Mobile 021 1395 862
More information about the R-help
mailing list