我有以下列表,希望仅使用 基R
打开(也称为展开)。
例如,我要打开它:
b <- list(a = c(1, 2), b = 1, d = c(5, 7))
等价于:
list(a = 1, a = 2, b = 1, d = 5, d = 7)
如果只有一个命名元素的长度大于1,但如果有多个元素,则没有此功能,我可以使用此功能:
expand_list <- function(listx){
long_elements <- as.numeric(which(lapply(listx, length) > 1))
short_elements <- as.numeric(which(lapply(listx, length) == 1))
res <- lapply(long_elements, function(x){
as.list(setNames(listx[[x]], rep(names(listx)[x], length(listx[[x]]))))
})
expanded_elements <- res[[1]]
c(listx[short_elements], expanded_elements)
}
expand_list(b)
答案 0 :(得分:3)
您可以使用stack
后跟setNames
来实现
y <- list(a = c(1, 2), b = 1, c = 2, d = c(5, 7))
x <- stack(y)
as.list(setNames(x$values, x$ind))