0

我有一个类似的清单

$`1`
[1] 1959   13

$`2`
[1] 2280  178   13

$`3`
[1] 2612  178   13

$`4`
[1] 2902  178   13

结构类似于:

structure(list(`1` = c(1959, 13), `2` = c(2280, 178, 13), `3` = c(2612, 
178, 13), `4` = c(2902, 178, 13)......,.Names = c("1", "2", "3", "4"....)

如何组合此列表中的列表并生成如下列表:

$`list`
[1] 1959   13
[2] 2280  178   13
[3] 2612  178   13
[4] 2902  178   13
4

2 回答 2

4

这是我能得到的最接近你所要求的矩阵的东西:

LIST <- structure(list(`1` = c(1959, 13), `2` = c(2280, 178, 13), `3` = c(2612, 
178, 13), `4` = c(2902, 178, 13)))

cbind.fill <-
function(...) {
    nm <- list(...)
    nm<-lapply(nm, as.matrix)
    n <- max(sapply(nm, nrow))
    do.call(cbind, lapply(nm, function(x) rbind(x, 
        matrix(, n - nrow(x), ncol(x)))))
}

t(do.call('cbind.fill', LIST))
print(X$list, na.print="", quote=FALSE)

或使用plyr

LIST <- lapply(LIST, function(x) data.frame(t(x)))
library(plyr)
rbind.fill(LIST)

也许你只是不想要名字?

如果是这样的话...

names(LIST) <- NULL
LIST

我想我只是没有得到你所追求的输出结构。

于 2012-07-30T18:31:54.213 回答
0

试试下面的代码。问题是我不太确定您想要什么作为输出;你称它为列表,但它看起来非常像矩阵。假设您确实希望将其作为矩阵,则以下内容应该可以解决问题:

x <- list()
x$`1` <- c(1959, 13)
x$`2` <- c(2280, 178, 13)
x$`3` <- c(2612, 178, 13)
x$`4` <- c(2902, 178, 13)

# maximum number of elements in any vector
max <- max(sapply(x, function(y) length(y)))

# make all vectors the same length
x <- lapply(x, function (y){length(y) <- max; y})

# combine them in a matrix
result <- do.call(rbind, x)

结果:

> result
  [,1] [,2] [,3]
1 1959   13   NA
2 2280  178   13
3 2612  178   13
4 2902  178   13

您始终可以将此矩阵输出保存为列表的元素。我想从这里开始使长度相等。

如果您希望您的矩阵是数字的,您将无法摆脱 NA(您始终可以将其转换为字符并使 NA 为“”,但进一步使用矩阵可能不是一个好主意) .

可能是我很困惑,并且您毕竟想要一个列表,但正如 Josh 在他的评论中提到的那样,在这种情况下,您的数据一开始是正确的。

于 2012-07-30T18:34:27.360 回答