Преобразовать неназванный регулярно структурированный список R в именованный список R - PullRequest
0 голосов
/ 23 октября 2018

У меня странный список R, в котором нечетные элементы списка, которые являются строками, должны быть именами четных элементов списка.Некоторые элементы являются списками внутри списков.Глубина списка заранее не задана.И упрощенная структура списка выглядит примерно так:

a <- list("key0",
          "value0",
          "key",
          list("key1", "value1",
               "key2", "value2", 
               "key3",  list("key6", "value6"),
               "key4", "value4",
               "key5", list(list(list("key7", "value7")))
          ))

Как из списка a можно получить обычный список с именем R b?

b <- list(key0 = "value0",
          key = list(key1 = "value1",
                     key2 = "value2", 
                     key3 = list(key6  = "value6"),
                     key4 = "value4",
                     key5 = list(list(list(key7 = "value7")))
          ))

Список a как структура данных имеет какое-то специальное техническое имя?

1 Ответ

0 голосов
/ 23 октября 2018

Использование рекурсивной функции:

fun <- function(x){
  x <- lapply(x,function(y) if (is.list(y)) y <- fun(y) else y)
  if(!is.null(names(x)) | length(x) == 1) return(x)
  x <- setNames(x[seq_along(x)%%2 == 0], x[seq_along(x)%%2 == 1])
  x
}
res <- fun(a)

identical(b,res)
# [1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...