2014-04-29 84 views
1

假設我有一組具有相同長度的獨立向量。例如,將幾個向量轉換爲向量列表

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

,我希望使他們成爲,其長度是共同的長度(10在給定示例)的列表,其中每個元素是一個向量,其長度是分別獨立的向量的數目給出。在我的例子,假設output的輸出對象,我期望

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

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

什麼是這樣做的常用方法?

回答

4

使用mapplyc

mapply(c, x, y, SIMPLIFY=FALSE) 

[[1]] 
[1] 1 NA 

[[2]] 
[1] 2 NA 

..<cropped>.. 

[[10]] 
[1] 10 NA 
+1

的位置'Map'是糖'mapply(... ,SIMPLIFY = FALSE)'。 – flodel

1

另一種選擇:

split(cbind(x, y), seq(length(x))) 

甚至:

split(c(x, y), seq(length(x))) 

甚至(假設x有沒有重複的值在你的例子) :

split(c(x, y), x) 
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)