Home > OS >  Accessing List Value by looking up value with same index
Accessing List Value by looking up value with same index

Time:02-14

I was following this blog post: enter image description here

What I understand he's done is basically this:


teams <- c("a","b","c")
values <- c(1,2,3)

example_df <- data.frame(teams,values)
example_list <- as.list(example_df)

example_list$values[a]

Error: object 'a' not found

But I get an NA value for this - am I missing something ?

Thanks in advance !

CodePudding user response:

The way a list works in R, makes it not really practical to address a list like that, as the values in the list aren't associated like that. Which leads to this:

teams <- c("a","b","c")
values <- c(1,2,3)

example_df <- data.frame(teams,values)
example_list <- as.list(example_df)

#Gives NULL
example_list[example_list$teams == "a"]$values

#Gives 1, 2, 3
example_list[example_list$teams == "b"]$values

#Gives NULL
example_list[example_list$teams == "b"]$values

You can see that this wouldn't work, because the syntax you would expect to work in this case, throws an error "incorrect amount of dimensions":

example_list[example_list$teams == "b", ]$values

However, it is really easy to address a data frame, or any matrix like structure in the way you want to:

teams <- c("a","b","c")
values <- c(1,2,3)

example_df <- data.frame(teams,values)

#Gives 1
example_df[example_df$teams == "a", ]$values

#Gives 2
example_df[example_df$teams == "b", ]$values

#Gives 3
example_df[example_df$teams == "b", ]$values

What I think is happening in the tutorial you shared is something else. As far as I can see, there are no names passed through to the list, but variables. It is not giving the value of a higher dimensional thing, but rather the value of the list itself. That also makes a lot more sense, as that is what the syntax is doing. "teams[1]" Simply returns the first value in the list called "teams" (even if that value is a vector or whatever) Of course, teams[i], where i is a variable, also works. What I mean is this:

teams = list(A = 1, B = 2, C = 3, D = 4)

#Gives A
teams[1]

If you want to understand why one of them works and the other one doesn't, here is both together. Throw it in RStudio, and look through the Environment.

## One dimensional
teams = list(A = "a", B = "very", C = "good", D = "example")

#Gives "very"
teams[2]


## Two dimensional
teams  <- c("a","b","c")
values <- c(1,2,3)
teams2 <- list(teams, values)

#Gives "a, b, c"
teams2[1]

#Gives NULL
teams2[3]
  •  Tags:  
  • r
  • Related