I'd like to avoid looping through an array in order to change values in the array as it takes too long. I red from an earlier post it can be done by "do.call" but never got it to work. The Idea is to change the value of "y" according to values in "x". Wherever "x" holds the value 3, the corresponding value in "y" should be set to 1. So I tried the following giving an error message: ################# x <- c(1,2,3,2,2,3,1,1,3,3) y <- c(0,0,1,1,0,0,1,0,0,1) Change_y <- function() { if (x == 3) {y <- 1} } do.call("Change_y", as.list(x,y)) Error in Change_y(1, 2, 3, 2, 2, 3, 1, 1, 3, 3) : unused argument(s) ( ...) ################## How should it be done? Cheers, Kare [[alternative HTML version deleted]]
y <- ifelse(x == 3, 1, y) -Kaom On Oct 20, 2008, at 6:07 AM, K?re Edvardsen wrote:> I'd like to avoid looping through an array in order to change values > in > the array as it takes too long. > I red from an earlier post it can be done by "do.call" but never got > it > to work. The Idea is to change the value of "y" according to values in > "x". Wherever "x" holds the value 3, the corresponding value in "y" > should be set to 1. > > So I tried the following giving an error message: > > ################# > x <- c(1,2,3,2,2,3,1,1,3,3) > y <- c(0,0,1,1,0,0,1,0,0,1) > > Change_y <- function() { > > if (x == 3) {y <- 1} > > } > > do.call("Change_y", as.list(x,y)) > > Error in Change_y(1, 2, 3, 2, 2, 3, 1, 1, 3, 3) : > unused argument(s) ( ...) > > ################## > > How should it be done? > > Cheers, > Kare > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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.
On Mon, Oct 20, 2008 at 03:07:45PM +0200, K?re Edvardsen wrote:> I'd like to avoid looping through an array in order to change values in > the array as it takes too long. > I red from an earlier post it can be done by "do.call" but never got it > to work. The Idea is to change the value of "y" according to values in > "x". Wherever "x" holds the value 3, the corresponding value in "y" > should be set to 1.This should do what you want - no looping required: y[x==3] <- 1 cu Philipp -- Dr. Philipp Pagel Lehrstuhl f?r Genomorientierte Bioinformatik Technische Universit?t M?nchen Wissenschaftszentrum Weihenstephan 85350 Freising, Germany http://mips.gsf.de/staff/pagel
Claudia Beleites
2008-Oct-20 13:23 UTC
[R] Trying to pass arrays as arguments to a function
> I'd like to avoid looping through an array in order to change values in > the array as it takes too long. > I red from an earlier post it can be done by "do.call" but never got it > to work. The Idea is to change the value of "y" according to values in > "x". Wherever "x" holds the value 3, the corresponding value in "y" > should be set to 1.y [x == 3] <- 1 -- Claudia Beleites Dipartimento dei Materiali e delle Risorse Naturali Universit? degli Studi di Trieste Via Alfonso Valerio 6/a I-34127 Trieste phone: +39 (0 40) 5 58-34 47 email: cbeleites at units.it