将几个向量转换为向量列表

时间:2014-04-29 18:03:41

标签: r list vector

假设我有一组相同长度的独立向量。例如,

x <- 1:10
y <- rep(NA, 10)

我希望将它们变成一个长度为公共长度的列表(在给定的例子中为10),其中每个元素是一个向量,其长度是给定的独立向量的数量。在我的示例中,假设output是输出对象,我期待

> str(output)
List of 10
 $ : num [1:2] 1 NA
 ...

> output
[[1]]
[1]  1 NA
...

这样做的常用方法是什么?

3 个答案:

答案 0 :(得分:4)

使用mapplyc

 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)