[R] replace an expression with its value, or read macros

Gabor Grothendieck ggrothendieck at gmail.com
Fri Apr 8 02:19:41 CEST 2011


On Thu, Apr 7, 2011 at 7:45 PM, Franklin Tamborello II
<Franklin.Tamborello at uth.tmc.edu> wrote:
> I know my subject line seems odd, but I want to replace an expression—such as a variable—with its value. For example, I want to paste() some strings together, assign the result to a variable s, then use the value of s as a variable to hold another value. Something like this:
>
> import_subjects <- function (start, iterations) {
> for (i in 1:iterations) { # iterate from start to end
> s <- paste("s", i, sep="") # make the data.frame's name
> fn <- paste(i, ".txt", sep="") # make the filename
> s <- read.delim(fn, header = FALSE) # now put it all together
> # …except that I don't want to reassign s, I want to evaluate it and make its value a variable with its own value.
> }
> }
>
> If this were Lisp I'd use backquotes (or "backticks", as some say) and commas—examples of read macros—to do this, but I can't find anything analogous for R. How might I accomplish this in R?
>

Here are a few possibilities:

# 1 - assign
assign(s, read.delim(fn, header = FALSE)

# 2 - .GlobalEnv
.GlobalEnv[[s]] <- read.delim(fn, header = FALSE)

# 3 - gsubfn's fn$ supports backticks
# Here we need gsubfn::fn to disambiguate the two fn's
library(gsubfn)
eval(gsubfn::fn$parse(text = " `s` <- read.delim(fn, header = FALSE) "))

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list