假设我有一组相同长度的独立向量。例如,
x <- 1:10
y <- rep(NA, 10)
我希望将它们变成一个长度为公共长度的列表(在给定的例子中为10),其中每个元素是一个向量,其长度是给定的独立向量的数量。在我的示例中,假设output
是输出对象,我期待
> str(output)
List of 10
$ : num [1:2] 1 NA
...
> output
[[1]]
[1] 1 NA
...
这样做的常用方法是什么?
答案 0 :(得分:4)
使用mapply
和c
:
mapply(c, x, y, SIMPLIFY=FALSE)
[[1]]
[1] 1 NA
[[2]]
[1] 2 NA
..<cropped>..
[[10]]
[1] 10 NA
答案 1 :(得分:1)
另一种选择:
split(cbind(x, y), seq(length(x)))
甚至:
split(c(x, y), seq(length(x)))
或者甚至(假设x
没有像您的示例中那样重复的值):
split(c(x, y), x)
答案 2 :(得分:1)
这是一个解决方案,允许您根据元素的位置将任意数量的等长向量压缩到列表中
merge_by_pos <- function(...){
dotlist = list(...)
lapply(seq_along(dotlist), function(i){
Reduce('c', lapply(dotlist, '[[', i))
})
}
x <- 1:10
y <- rep(NA, 10)
z <- 21:30
merge_by_pos(x, y, z)