[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