Hi, I am trying to apply *sapply* to functions within functions within functions to do a Monte Carlo experiment: take Y sample of size X based on cell probabilities (using Brian Ripley's suggestion for drawing from contingency tables), for each calculate a vector of statistics, calculate bootstrap std errs with R replications and their means and SD. Store results in a matrix for further use. The problem is how to pass 3 arguments returned as c() by a fucntion to another function that uses them using: sapply(rep(c(), R), anotherfucntion). This does not seem to work, possibly because I am passing a c() argument where 3 separate arguemnts are needed. What is a good way to do this? I am trying to avoid *for* loops. Anupam. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
using list to pass argument to function
2 messages · TyagiAnupam@aol.com, Henrik Bengtsson
The problem is that c() is of length zero and repeating such a vector R
times will only give you a vector of length zero, e.g. length(rep(c(),
R)) == 0. I think you have observed this already. The only way to store
a repetition of empty vectors or NULL values is by using the data type
list, e.g.
args <- rep(list(c()), R)
Then sapply(args, FUN=anotherfunction) will work, but I think you are
better of with
lapply(args, FUN=anotherfunction)
I am not sure if you wrote the function that returns c() or not. If not,
you can always convert a vector to a list and then make sure it has the
right length, i.e. R, by doing:
if (length(vec) == 0)
args <- rep(list(vec), length.out=R)
else
args <- rep(as.list(vec), length.out=R)
Warning, only using as.list() won't work if length(vec) == 0, but if you
know that it is not a list that is returned, which I guess you know, all
you have to do is:
args <- rep(list(vec), length.out=R)
Finally, if R is not way too big I actually think a for loop would be
equally fast if that is your concern. Someone correct me if I am wrong,
but for loops are not penalized that much in R as for instance in
Matlab.
Cheers
Henrik Bengtsson
-----Original Message----- From: owner-r-help at stat.math.ethz.ch [mailto:owner-r-help at stat.math.ethz.ch] On Behalf Of TyagiAnupam at aol.com Sent: den 13 november 2002 13:02 To: r-help at stat.math.ethz.ch Subject: [R] using list to pass argument to function Hi, I am trying to apply *sapply* to functions within functions within functions to do a Monte Carlo experiment: take Y sample of size X based on cell probabilities (using Brian Ripley's suggestion for drawing from contingency tables), for each calculate a vector of statistics, calculate bootstrap std errs with R replications and their means and SD. Store results in a matrix for further use. The problem is how to pass 3 arguments returned as c() by a fucntion to another function that uses them using: sapply(rep(c(), R), anotherfucntion). This does not seem to work, possibly because I am passing a c() argument where 3 separate arguemnts are needed. What is a good way to do this? I am trying to avoid *for* loops. Anupam. -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. -.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-> FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._. _._._._._._._._._
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._