[R] A suggestion to improve ifelse behaviour with vector yes/no arguments

Duncan Murdoch murdoch at stats.uwo.ca
Tue May 31 17:16:48 CEST 2005


Mäkinen Jussi wrote:
> Dear All,
> 
> I luckily found the following feature (or problem) when tried to apply ifelse-function to an ordered data.
> 
> 
>>test <- c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE)
>>ifelse(test, 0, 1:4)
> 
> [1] 0 0 0 4 1 2 3
> 
> 
> It roots into the ifelse-syntax:
> 
> ans[!test & !nas] <- rep(no, length.out = length(ans))[!test & !nas]
> 
> Would it be possible to disable this feature in the next R-version? For instance change the code to be:
> 
> ans[!test & !nas] <- rep(no, length.out = length(ans[!test & !nas]))
> 
> which seems to solve the problem.

As Dimitris said, this is just recycling.  I think getting rid of 
recycling on vectors with length greater than 1 would have been a good 
decision in S about 15 years ago, but it's too late now.

Duncan Murdoch




More information about the R-help mailing list