Re: [R] ifelse on data frames

From: Henric Nilsson <henric.nilsson_at_statisticon.se>
Date: Mon 08 Jan 2007 - 08:33:26 GMT

maj@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


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. Received on Mon Jan 08 19:38:08 2007

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Mon 08 Jan 2007 - 09:30:29 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.