R 如何更有效地将庞大的向量列表转换为矩阵?
我有一个长度为130000的列表,其中每个元素都是长度为110的字符向量。我想将此列表转换为维度为143000*10的矩阵。我怎样才能更有效地完成它\ 我的代码是:R 如何更有效地将庞大的向量列表转换为矩阵?,r,list,matrix,performance,R,List,Matrix,Performance,我有一个长度为130000的列表,其中每个元素都是长度为110的字符向量。我想将此列表转换为维度为143000*10的矩阵。我怎样才能更有效地完成它\ 我的代码是: output=NULL for(i in 1:length(z)) { output=rbind(output, matrix(z[[i]],ncol=10,byrow=TRUE)) } 这将有助于获得有关输出的示例信息。不建议在越来越大的事情上递归使用rbind。我的第一个猜测对你有帮助: z &l
output=NULL
for(i in 1:length(z)) {
output=rbind(output,
matrix(z[[i]],ncol=10,byrow=TRUE))
}
这将有助于获得有关输出的示例信息。不建议在越来越大的事情上递归使用
rbind
。我的第一个猜测对你有帮助:
z <- list(1:3,4:6,7:9)
do.call(rbind,z)
z我想你想要
如果这个比例适当(即,您没有遇到内存问题),那么在一台类似的机器上(我在一台2岁的MacBook Pro上这样做),完整的问题将需要大约130*0.2秒=26秒。这应该相当于您当前的代码,只是要快得多:
output <- matrix(unlist(z), ncol = 10, byrow = TRUE)
输出您可以使用as.matrix,如下所示:
output <- as.matrix(z)
输出您也可以使用
output <- as.matrix(as.data.frame(z))
output如果您希望维度为143000*11,为什么要将ncol设置为10?等等-当您说每个条目有11个字符时,您的意思是它是一个包含11个项目的向量?我原本以为每个都是一个包含11个字符的字符串。你能给我举个例子吗?谢谢Dason和David!那是个打字错误。我已经改正了。@user1787675:我还是不明白。什么是“条目”?它是矢量吗?你能给我看一下z[1:2]
?你好,大卫,我查了字典,发现我指的是列表中的组件。我为我造成的混乱感到抱歉。我不擅长英语:)宾果。这应该比我的解决方案快得多,但我想得不够快。+1,但我建议在unlist
中设置USE.NAMES=FALSE
,以节省时间和内存。它应该是USE.NAMES
(即小写)。为了澄清,它应该是output@mikey。它应该是:输出是神奇的!在我用了一年的东芝机器上这样做大约需要20秒,这为我节省了很多时间。而且,显示运行时间的函数也非常有趣。
output <- as.matrix(z)
output <- as.matrix(as.data.frame(z))
output <- matrix(unlist(z), ncol = 10, byrow = TRUE)