35

I have a list in R:

a <- list(n1 = "hi", n2 = "hello")

I would like to append to this named list but the names must be dynamic. That is, they are created from a string (for example: paste("another","name",sep="_")

I tried doing this, which does not work:

c(a, parse(text="paste(\"another\",\"name\",sep=\"_\")=\"hola\"")

What is the correct way to do this? The end goal is just to append to this list and choose my names dynamically.

Ben Bolker
  • 211,554
  • 25
  • 370
  • 453
Alex
  • 19,533
  • 37
  • 126
  • 195

2 Answers2

42

You could just use indexing with double brackets. Either of the following methods should work.

a <- list(n1 = "hi", n2 = "hello")
val <- "another name"
a[[val]] <- "hola"
a
#$n1
#[1] "hi"
#
#$n2
#[1] "hello"
#
#$`another name`
#[1] "hola"

 a[[paste("blah", "ok", sep = "_")]] <- "hey"
 a
#$n1
#[1] "hi"
#
#$n2
#[1] "hello"
#
#$`another name`
#[1] "hola"
#
#$blah_ok
#[1] "hey"
Dason
  • 60,663
  • 9
  • 131
  • 148
16

You can use setNames to set the names on the fly:

a <- list(n1 = "hi", n2 = "hello")
c(a,setNames(list("hola"),paste("another","name",sep="_")))

Result:

$n1
[1] "hi"

$n2
[1] "hello"

$another_name
[1] "hola"
Ben Bolker
  • 211,554
  • 25
  • 370
  • 453