Search code examples
rnon-standard-evaluation

Update lists elements programmatically looping through the lists names


I need to update lists elements programmatically looping through the lists names in R.

Is there a way to do that using some sort of Non-Standard Evaluation or another method?

Pseudo-code of a minimum example:

  x = list(a=1)
  y = list(a=3)
  
  for(i in c("x", "y")){
    
    i[["a"]] <- 10
  }

Expected results:

  x[["a"]] == 10
  y[["a"]] == 10

Edit: I found this way to update the values directly without making a copy of the lists via get(i):

x = list(a=1)
y = list(a=3)

.env = pryr::where("x")

for(i in c("x", "y")){
    
  .env [[ i ]] [[ "a" ]] <- 10
}

Solution

  • The "x", "y" are strings, we need to get the value as well as assign

    for(i in c("x", "y")) {
        tmp <- get(i)
        tmp[["a"]] <- 10
        assign(i, tmp)
    }
    

    -checking

    > x
    $a
    [1] 10
    
    > y
    $a
    [1] 10