[R] parse on left hand side of R assignment

John Fox jfox at mcmaster.ca
Sat May 31 19:30:07 CEST 2003

At 11:57 AM 5/31/2003 -0500, Paul E. Johnson wrote:
>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.

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 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

More information about the R-help mailing list