Добавление нового значения во вложенный список в R - PullRequest
1 голос
/ 27 апреля 2020

Я использую Highcharts для визуализации, и Highcharter генерирует диаграммы в виде вложенного списка, аналогичного example_list ниже. Я суммирую это здесь, потому что исходный список намного длиннее и сложнее.

example_list <- list(
    x = list(
        hc_opts = list(
            series = list(
                list(group = "group_a", data = list(0,2,4,6)),
                list(group = "group_b", data = list(0,3,6,9)),
                list(group = "group_c", data = list(9,4,8,12))))))

Так же, как группа и узлы данных, я хотел бы добавить элемент с именем type на уровне group и data, но только для 1-го и 3-го элементов в series. Я в основном ищу вывод, такой же, как следующий:

example_list <- list(
    x = list(
        hc_opts = list(
            series = list(
                list(group = "group_a", data = list(0,2,4,6), type = "type_X"),
                list(group = "group_b", data = list(0,3,6,9)),
                list(group = "group_c", data = list(9,4,8,12), type = "type_Y")))))

Я могу сделать это с for-l oop (потому что у меня есть векторы для местоположений и типов), но должен быть элегантный способ его кодирования. Моя лучшая попытка на данный момент.

locations <- c(1,3)
types <- c("type_X","type_Y")
for(i in 1:length(locations)) {
    example_list[["x"]][["hc_opts"]][["series"]][[locations[i]]][["type"]] <- types[i]
}

1 Ответ

0 голосов
/ 27 апреля 2020

Мы можем использовать Map:

example_list$x$hc_opts$series[c(1, 3)] <- Map(c, 
         example_list$x$hc_opts$series[c(1, 3)], type = types)


#$x
#$x$hc_opts
#$x$hc_opts$series
#$x$hc_opts$series[[1]]
#$x$hc_opts$series[[1]]$group
#[1] "group_a"

#$x$hc_opts$series[[1]]$data
#$x$hc_opts$series[[1]]$data[[1]]
#[1] 0

#$x$hc_opts$series[[1]]$data[[2]]
#[1] 2

#$x$hc_opts$series[[1]]$data[[3]]
#[1] 4

#$x$hc_opts$series[[1]]$data[[4]]
#[1] 6


#$x$hc_opts$series[[1]]$type
#[1] "type_X"
#...
#...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...