On Friday 05 January 2007 19:21, Peter Dalgaard wrote: > Ramon Diaz-Uriarte wrote: > > Dear All, > > > > I've read Thomas Lumley's fortune "If the answer is parse() you should > > usually rethink the question.". But I am not sure it that also applies > > (and why) to other situations (Lumley's comment > > http://tolstoy.newcastle.edu.au/R/help/05/02/12204.html > > was in reply to accessing a list). > > > > Suppose I have similarly called functions, except for a postfix. E.g. > > > > f.1 <- function(x) {x + 1} > > f.2 <- function(x) {x + 2} > > > > And sometimes I want to call f.1 and some other times f.2 inside another > > function. I can either do: > > > > g <- function(x, fpost) { > > calledf <- eval(parse(text = paste("f.", fpost, sep = ""))) > > calledf(x) > > ## do more stuff > > } > > > > > > Or: > > > > h <- function(x, fpost) { > > calledf <- get(paste("f.", fpost, sep = "")) > > calledf(x) > > ## do more stuff > > } > > > > > > Two questions: > > 1) Why is the second better? > > > > 2) By changing g or h I could use "do.call" instead; why would that be > > better? Because I can handle differences in argument lists?
Dear Peter, Thanks for your answer. > > Who says that they are better? If the question is how to call a > function specified by half of its name, the answer could well be to use > parse(), the point is that you should rethink whether that was really > the right question. > > Why not instead, e.g. > > f <- list("1"=function(x) {x + 1} , "2"=function(x) {x + 2}) > h <- function(x, fpost) f[[fpost]](x) > > > h(2,"2") > > [1] 4 > > > h(2,"1") > > [1] 3 > I see, this is direct way of dealing with the problem. However, you first need to build the f list, and you might not know about that ahead of time. For instance, if I build a function so that the only thing that you need to do to use my function g is to call your function "f.something", and then pass the "something". I am still under the impression that, given your answer, using "eval(parse(text" is not your preferred way. What are the possible problems (if there are any, that is). I guess I am puzzled by "rethink whether that was really the right question". Thanks, R. > > Thanks, > > > > > > R. -- Ramón Díaz-Uriarte Centro Nacional de Investigaciones Oncológicas (CNIO) (Spanish National Cancer Center) Melchor Fernández Almagro, 3 28029 Madrid (Spain) Fax: +-34-91-224-6972 Phone: +-34-91-224-6900 http://ligarto.org/rdiaz PGP KeyID: 0xE89B3462 (http://ligarto.org/rdiaz/0xE89B3462.asc) **NOTA DE CONFIDENCIALIDAD** Este correo electrónico, y en s...{{dropped}} ______________________________________________ R-help@stat.math.ethz.ch 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.