Существует аналогичный вопрос о комбинировании векторов различной длины здесь , но все ответы (кроме ответа @ Ronak Shah ) теряют имена / имена.
Моя проблема в том, что мне нужно сохранить имена столбцов, что возможно при использовании пакета rowr
и cbind.fills
.
Я хотел бы остаться в base-R или использовать stringi
, и выходной сигнал должен оставаться матрицей.
Данные испытаний:
inp <- list(structure(c("1", "2"), .Dim = 2:1, .Dimnames = list(NULL,"D1")),
structure(c("3", "4", "5"), .Dim = c(3L, 1L), .Dimnames = list(NULL, "D2")))
Я знаю, что могу заранее получить имена столбцов, а затем переназначить их после создания матрицы, например:
## Using stringi
colnam <- unlist(lapply(inp, colnames))
out <- stri_list2matrix(inp)
colnames(out) <- colnam
out
## Using base-R
colnam <- unlist(lapply(inp, colnames))
max_length <- max(lengths(inp))
nm_filled <- lapply(inp, function(x) {
ans <- rep(NA, length = max_length)
ans[1:length(x)]<- x
ans
})
out <- do.call(cbind, nm_filled)
colnames(out) <- colnam
out
Есть ли другие опции, которые сохраняют имена столбцов?