Search code examples
rlistdataframe

Proper way to access list elements in R


I am trying to make a list and access it's cells later in R. I am new to R and have a Matlab background. These [], [[]] are really bugging me. I tried reading the help and online but I still don't get it. In the following code c["var1"][1] returns differently than c$"var"[1].

What are the actual uses for these three notations [], [[]], $?

v <- vector("character", 5)
v[1] <- 'a'
v[2] <- 'a'
v[4] <- 'a'
v
# [1] "a" "a" ""  "a" "" 
c <- list(v, v)
names(c) <- c("var1", "var2")
c
# $var1
# [1] "a" "a" ""  "a" "" 

# $var2
# [1] "a" "a" ""  "a" "" 

c["var1"][1]
# $var1
# [1] "a" "a" ""  "a" "" 

c$"var1"[1]
# [1] "a"

Solution

  • All these techniques give different outputs.

    List[ ] returns a list - a sub-list of the original list List.

    List[[ ]] returns the single object stored at that position in List.

    If it is a named list, then

    List$name and List[["name"]] return the same thing;

    List["name"] returns a list. Consider the following example:

    > List <- list(A = 1,B = 2,C = 3,D = 4)
    > List[1]
    $A
    [1] 1
    
    > class(List[1])
    [1] "list"
    > List[[1]]
    [1] 1
    > class(List[[1]])
    [1] "numeric"
    > List$A
    [1] 1
    > class(List$A)
    [1] "numeric"
    > List["A"]
    $A
    [1] 1
    
    > class(List["A"])
    [1] "list"
    > List[["A"]]
    [1] 1
    > class(List[["A"]])
    [1] "numeric"