tags:

views:

1789

answers:

2

R newbie question:

I have two variables, key and value, and I want to add them as a key/value pair to a list:

> key = "width"
> value = 32

> mylist = list()
> mylist$key = value

The result is this:

> mylist
$key
[1] 32

But I would like this instead:

> mylist
$width
[1] 32

How can I do this?

+4  A: 

R lists can be thought of as hashes- vectors of objects that can be accessed by name. Using this approach you can add a new entry to the list like so:

> key <- "width"
> value <- 32

> mylist <- list()
> mylist[[ key ]] <- value

Here we use the string stored in the variable key to access a position in the list much like using the value stored in a loop variable i to access a vector through:

vector[ i ]

The result is:

> myList
$width
[1] 32
Sharpie
Thanks! I don't really understand this indexing operator yet. Although it is explained here: http://cran.r-project.org/doc/manuals/R-lang.html#Indexing, the usage you showed is not described. Is there any online doc where this is described properly?
A: 

List elements in R can be named. So in your case just do

 > mylist = list()
 > mylist$width = value

When R encounters this code

> l$somename=something

where l is a list. It appends to a list an element something, and names it with name somename. It is then can be accessed by using

> l[["somename"]]

or

> l$somename

The name can be changed with command names:

> names(l)[names(l)=="somename"] <- "othername"

Or if you now the position of the element in the list by:

> names(l)[1] <- "someothername"
mpiktas