How can I create lists with element names created on the fly? --8<---------------cut here---------------start------------->8---> list (foo = 10)$foo [1] 10> list ("foo" = 10)$foo [1] 10> list (paste("f","oo",sep="") = 10)Error: unexpected '=' in "list (paste("f","oo",sep="") =" --8<---------------cut here---------------end--------------->8--- I understand that tags in list() are not evaluated, but is there a more elegant way than --8<---------------cut here---------------start------------->8---> z <- list(10) > names(z) <- paste("f","oo",sep="") > z$foo [1] 10 --8<---------------cut here---------------end--------------->8--- thanks! -- Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X 11.0.11103000 http://www.childpsy.net/ http://www.memritv.org http://thereligionofpeace.com http://truepeace.org Unix roulette: `dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM`
How about this (if you don't like writing two lines, encapsulate it in a function):> x <- list(10) > names(x) <- paste('f', 'oo', sep = '') > str(x)List of 1 $ foo: num 10>On Mon, Nov 19, 2012 at 1:07 PM, Sam Steingold <sds at gnu.org> wrote:> How can I create lists with element names created on the fly? > > --8<---------------cut here---------------start------------->8--- >> list (foo = 10) > $foo > [1] 10 > >> list ("foo" = 10) > $foo > [1] 10 > >> list (paste("f","oo",sep="") = 10) > Error: unexpected '=' in "list (paste("f","oo",sep="") =" > --8<---------------cut here---------------end--------------->8--- > > I understand that tags in list() are not evaluated, but is there a more > elegant way than > > --8<---------------cut here---------------start------------->8--- >> z <- list(10) >> names(z) <- paste("f","oo",sep="") >> z > $foo > [1] 10 > --8<---------------cut here---------------end--------------->8--- > > thanks! > > -- > Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X 11.0.11103000 > http://www.childpsy.net/ http://www.memritv.org > http://thereligionofpeace.com http://truepeace.org > Unix roulette: `dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM` > > ______________________________________________ > R-help at r-project.org 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.-- Jim Holtman Data Munger Guru What is the problem that you are trying to solve? Tell me what you want to do, not how you want to do it.
If you have a list and want to add a new (or replace a) named component use myList[[compName]] <- compValue as in myList <- list() compName <- "Incr" compValue <- function(x) x + 1 myList[[compName]] <- compValue If you want to make a new list-with-names from scratch try structure(list(1, "cat", function(x)x+1), names=c("One","Pet","Increment")) (structure() is a general way to make an object and add attributes to it in one statement.) Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf > Of Sam Steingold > Sent: Monday, November 19, 2012 10:07 AM > To: r-help at r-project.org > Subject: [R] generated list element names > > How can I create lists with element names created on the fly? > > --8<---------------cut here---------------start------------->8--- > > list (foo = 10) > $foo > [1] 10 > > > list ("foo" = 10) > $foo > [1] 10 > > > list (paste("f","oo",sep="") = 10) > Error: unexpected '=' in "list (paste("f","oo",sep="") =" > --8<---------------cut here---------------end--------------->8--- > > I understand that tags in list() are not evaluated, but is there a more > elegant way than > > --8<---------------cut here---------------start------------->8--- > > z <- list(10) > > names(z) <- paste("f","oo",sep="") > > z > $foo > [1] 10 > --8<---------------cut here---------------end--------------->8--- > > thanks! > > -- > Sam Steingold (http://sds.podval.org/) on Ubuntu 12.04 (precise) X 11.0.11103000 > http://www.childpsy.net/ http://www.memritv.org > http://thereligionofpeace.com http://truepeace.org > Unix roulette: `dd if=/dev/urandom of=/dev/kmem bs=1 count=1 seek=$RANDOM` > > ______________________________________________ > R-help at r-project.org 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.