Rlist, объединить элементы с тем же именем (некоторые из них списки) - PullRequest
1 голос
/ 17 января 2020

У меня есть список, где элементы - это список, я хочу объединить элементы с одинаковыми именами, не теряя структуру остальных. Другими словами, я хочу преобразовать этот список2 в список1

list1= list ("credit" = list("Conceptualization", "Software"), ".attrs" = list ("contrib-type"= "author"))
list2 =list ("credit" = "Conceptualization","credit" ="Software", ".attrs" = list ("contrib-type"= "author"))

Я пытался поиграть с unlist и ответом, который нашел здесь, но он уничтожает элемент .attrs:

tapply(unlist(list2, use.names = FALSE, recursive=FALSE), rep(names(list2), lengths(list2)), FUN = list)

$.attrs
$.attrs[[1]]
[1] "author"


$credit
$credit[[1]]
[1] "Conceptualization"

$credit[[2]]
[1] "Software"

1 Ответ

1 голос
/ 17 января 2020

Полагаю, вам нужен только 1-й уровень, а это не список. Я использую dplyr::lst «Обратите внимание, что lst жизненный цикл ставит под сомнение», потому что он поддерживает dplyr квази-цитату.

sapply(unique(names(list2)), function(x) {
  #browser()
  if(sum(names(list2)==x)>=2 & !any(sapply(list2[names(list2)==x], function(l) is.list(l)))){
    item <- list2[names(list2)==x]
    names(item) <- NULL
    dplyr::lst(!!x := item)
  } else {
    list2[x]
  }

}, USE.NAMES = FALSE)

$credit
$credit[[1]]
[1] "Conceptualization"

$credit[[2]]
[1] "Software"


$.attrs
$.attrs$`contrib-type`
[1] "author"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...