Tell us what you want to do, not how you want to do it.  What is the
problem you are trying to solve?  You can create your own
function/code within the 'apply' to process one element of the vector
as a time.  What is the output that you expect?  There is (almost)
always a way of doing it, as long as we know what you want to do.

On Tue, Dec 27, 2011 at 3:34 PM, Alex Zhang <alex.zh...@ymail.com> wrote:
> John,
>
> Thanks for the pointers.
>
> The DummyFunc is just a made-up example. The true function I need to use is 
> more complicated and would be distractive to include.
>
> Do you mean that sapply would take columns in the input data.frame and feed 
> them into "FUN" as "whole" vectors? That explains the behavior. Is there an 
> "*apply" function that will fee elements of the input data.frame into "FUN" 
> instead of whole columns? Thanks.
>
>
> ________________________________
>  From: John Fox <j...@mcmaster.ca>
> To: 'Alex Zhang' <alex.zh...@ymail.com>
> Cc: r-help@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-boun...@r-project.org [mailto:r-help-bounces@r-
>> project.org] On Behalf Of Alex Zhang
>> Sent: December-27-11 2:14 PM
>> To: r-help@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]]
>        [[alternative HTML version deleted]]
>
>
> ______________________________________________
> R-help@r-project.org 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.
>



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

______________________________________________
R-help@r-project.org 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.

Reply via email to