You are right that the problem is that "DummyFunc" isn't vectorized. R looks for a single logical value in an "if" statement but "x>0" gives it a whole vector's worth -- as the warning indicates, it only uses the first and pushes the whole vector through the loop in the return(-x) branch, which explains the values you saw. The correct way to do it would be something like:
ifelse(x < 0, -x, x) If, as you suggest, you can't modify the function (for whatever reason), you can use the higher-order-function Vectorize() as follows: vDummyFunc <- Vectorize(DummyFunc) vDummyFunc(-3:7) This isn't real vectorization, but it hides some *apply family stuff nicely. Note that this doesn't act as you might expect on Y since data.frames are taken column wise by default (you'll get the same problem). Michael On Tue, Dec 27, 2011 at 1:14 PM, Alex Zhang <alex.zh...@ymail.com> wrote: > 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. > > 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. > > - Alex > [[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. > ______________________________________________ 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.