Добавить значения элементов подсписка, если подсписка еще не существует, и перезаписать его

#r #list #nested-lists #sublist

#r #Список #вложенные списки #подсписок

Вопрос:

Если у меня есть вложенный список

 m=list(list(a=1,b=2,c=3),list(a=1,b=2,c=3))
  

и у меня есть значения для элемента d в векторе, как я могу затем добавить эти значения во вложенный список m , если подсписка d еще не существует, и перезаписать значения подсписка d ?

 lapply(1:length(m),function(i) c(m[[i]],d=d[[i]]))
  

добавляет значения vector d=c(1,3) , но проблема в том, что если я сделаю это дважды, он будет продолжать добавлять подсписки d , чего я не хочу — я бы предпочел, чтобы они были перезаписаны. (Я хотел бы добавить / заменить 1-й векторный элемент в 1-й подсписок, 2-й — во 2-й подсписок и т. Д.)

Как мне это сделать в R?

Ответ №1:

modifyList Функция может быть полезна в этом случае. Просто запустите

 lapply(m, modifyList, list(d=1:3))
  

И это заменит значения подсписков в M на значения в указанном вами списке.

Если у вас был вектор d значений, и вы хотели добавить только по одному в каждый список, то

 Map(modifyList, m, lapply(c(1,3), function(x) list(d=x)))
  

может быть лучшим вариантом.

Комментарии:

1. Многие thx — но это добавляет весь вектор затем к каждому элементу подсписка d, тогда как я хотел бы добавить первый векторный элемент d в первый подсписок, 2-й ко второму и т. Д. Как мне это сделать?

2. Я нашел это — это было бы lapply(1:length(m), function(i) modifyList(m[[i]],list(d = d [[i]]))) тогда я думаю. Большое спасибо за помощь — не видел эту функцию!

3. @TomWenseleers Я добавил измененный ответ с меньшей индексацией.

Ответ №2:

Я думаю

 lapply(m,function(x) { x$d <- c(1,3); x })
  

должно работать (или x[["d"]] <- ... )

Комментарии:

1. Много раз — но это добавляет весь вектор затем к каждому элементу подсписка d, тогда как я хотел бы добавить первый векторный элемент d в первый подсписок, 2-й ко второму и т. Д