[R] sapply Call Returning " the condition has length > 1" Error

John Fox jfox at mcmaster.ca
Tue Dec 27 21:10:31 CET 2011


Dear Alex,

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Alex Zhang
> Sent: December-27-11 2:14 PM
> To: r-help at r-project.org
> Subject: [R] sapply Call Returning " the condition has length > 1"
> Error
> 
> Dear all,
> 
> Happy new year!
> 
> I have a question re using sapply. Below is a dummy example that would
> replicate the error I saw.
> 
> ##Code Starts here
> DummyFunc <- function(x) {
> 
> if (x > 0) {
> return (x)
> } else
> {
> return (-x)
> }
> 
> }
> 
> Y = data.frame(val = c(-3:7))
> sapply(Y, FUN = DummyFunc)
> ##Code ends here
> 
> When I run it, I got:
>      val
>  [1,]   3
>  [2,]   2
>  [3,]   1
>  [4,]   0
>  [5,]  -1
>  [6,]  -2
>  [7,]  -3
>  [8,]  -4
>  [9,]  -5
> [10,]  -6
> [11,]  -7
> Warning message:
> In if (x > 0) { :
>   the condition has length > 1 and only the first element will be used
> 
> The result is different from what I would expect plus there is such an
> error message.

This is a warning, not really an error message. A data frame is essentially
a list of variables (columns), and sapply() applies its FUN argument to each
list element, that is, each variable -- the one variable val in your case.
That produces a warning because val > 0 is a vector of 11 elements, and the
first comparison, 3 > 0, which is TRUE, controls the result.

> 
> I guess if the DummyFunc I provided is compatible with vectors, the
> problem would go away. But let's suppose I cannot change DummyFunc. Is
> there still a way to use sapply or alike without actually writing a
> loop? Thanks.

Well, you could just use

> abs(Y$val)
 [1] 3 2 1 0 1 2 3 4 5 6 7

but I suppose that you didn't really want to write your own version of the
absolute-value function as something more than an exercise.

An alternative is

> with(Y, ifelse(val > 0, val, -val))
 [1] 3 2 1 0 1 2 3 4 5 6 7

I hope this helps,
 John

--------------------------------
John Fox
Senator William McMaster
  Professor of Social Statistics
Department of Sociology
McMaster University
Hamilton, Ontario, Canada
http://socserv.mcmaster.ca/jfox



> 
> - Alex
> 	[[alternative HTML version deleted]]



More information about the R-help mailing list