________________________________
From: John Fox <jfox at mcmaster.ca>
To: 'Alex Zhang' <alex.zhang at ymail.com>
Cc: r-help at r-project.org
Sent: Tuesday, December 27, 2011 3:10 PM
Subject: RE: [R] sapply Call Returning " the condition has length > 1"
Error
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]]