2013-09-27 48 views
0

让我们说我想创建一个列表,其中每个元素是一个整数向量。创建一个整数向量列表

让我们说我有,

a = c(1,2,3,4) 
b = c(7,9,10,3) 
d = c(90.2,43.1,54.2,12.3) 

而且我想一个列表,其中列表中的元素1: c(1,7,90.2) 第二个因素是, c(2,9,43.1), 第三个要素是, c(3,10,54.2) , 和第四个元素是, c(4,3,12.3)

如果我这样做,

my.list = list(a=a,b=b,d=d) 

给我我想要的转置。有没有直接的方法来达到这样的目标?

我需要一个列表,因为我想使用mclapply函数,并且该函数仅将列表作为输入,或者(如果给定的数据帧)将它们强制为非期望的列表结构。

请注意,在我的程序中,这个向量非常庞大,4亿条左右。我正在寻找一种快速有效的方式来做到这一点。谢谢!

+0

什么你的意思是“转置”列表?你想要将数据存储为列吗?如果是这样,那么按照@tcash的建议,你应该使用'data.frame's(但是跳过第二个'apply'步骤) –

+0

如果你需要区分整数和数字(浮点)列向量,那么你必须按照原样处理列表(或数据帧),而不进行转置。如果这种区分不相关,那么你应该使用数字矩阵来代替,并使用函数't()'来转置它。 –

+0

嗨,谢谢,我无法使用data.frame,因为稍后我将使用mclapply,并且mclapply只将列表作为输入。 – Dnaiel

回答

2
kk<-Map(function(x,y,w) c(x,y,w),a,b,d) 
> kk[1] 
[[1]] 
[1] 1.0 7.0 90.2 

或者只是:

kk<-Map(`c`,a,b,d) 
> kk[1] 
[[1]] 
[1] 1.0 7.0 90.2 
+1

+1 - 也可概括为'do.call(Map,c(c,my.list))' – flodel

1

将您的向量到一个data.frame

adf<-data.frame(a=a, b=b, d=d) 

然后使用apply把每一行到一个列表元素:

apply(adf, 1, function(x) list(x)) 
+0

谢谢,如果我的媒介约为5亿个元素,这是否有效? – Dnaiel

+0

嗨,我不确定这是否是最好的方式去做这件事。 –