[R] ifelse on data frames
Henric Nilsson
henric.nilsson at statisticon.se
Mon Jan 8 09:33:26 CET 2007
maj at stats.waikato.ac.nz said the following on 2007-01-05 04:18:
> [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))
How about using
sapply(A, function(x) ifelse(x == 0, 0, -x*log(x)))
?
HTH,
Henric
>
> 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
More information about the R-help
mailing list