[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