Skip to content

parse on left hand side of R assignment

5 messages · Paul Johnson, Uwe Ligges, Spencer Graves +2 more

#
I keep finding myself in a situation where I want to calculate a 
variable name and then use it on the left hand side of an assignment. 
For example

iteration <- 1
varName <- paste("run",iteration,sep="")
myList$parse(text=varName) <- aColumn

I want to take some existing variable  "aColumn" and use the name 
"varName" name for it and put it into a list "myList".  That use fails 
with this error:

Error: couldn't find function "(<-"

I've tried many variations on the theme.

If I could do this with a data frame, I would be just as happy. Right 
now I'm using a list rather than a data frame because not all columns 
are of the same length. But I can work around that.
#
Paul E. Johnson wrote:
See ?assign.

Uwe Ligges
#
Have you considered the following:

 > myList <- list()
 > iteration <- 1
 > varName <- paste("run",iteration,sep="")
 > myList[[varName]] <- "aColumn"
 > myList
$run1
[1] "aColumn"

hth.  spencer graves
Paul E. Johnson wrote:
#
At 11:57 AM 5/31/2003 -0500, Paul E. Johnson wrote:
Dear Paul,

I don't think that assign() will work in this context, but I may be wrong.

One way to proceed is with eval() and parse(), assembling the command to be 
executed as a text string; for example,

eval(parse(text=paste("myList$", varName, " <- aColumn", sep=""))), though 
you do have to be careful about the environment in which the expression is 
evaluated -- see the envir argument to eval.

I hope that this helps,
  John


-----------------------------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario, Canada L8S 4M4
email: jfox at mcmaster.ca
phone: 905-525-9140x23604
web: www.socsci.mcmaster.ca/jfox
#
On Sat, 31 May 2003, Paul E. Johnson wrote:

            
For a data frame you could use

mydf[paste("run",iteration,sep="")] <- aColumn

and for a list or a data frame

Robject[[paste("run",iteration,sep="")]] <- aColumn