[R] eval(parse(text vs. get when accessing a function

From: Ramon Diaz-Uriarte <rdiaz_at_cnio.es>
Date: Fri 05 Jan 2007 - 18:02:07 GMT

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


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?



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

PGP KeyID: 0xE89B3462

**NOTA DE CONFIDENCIALIDAD** Este correo electrónico, y en s...{{dropped}}

R-help@stat.math.ethz.ch mailing list
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Received on Sat Jan 06 12:07:18 2007

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 06 Jan 2007 - 01:30:26 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.