2009-11-20 137 views
1

将矩阵对象初始化为NULL,然后使用cbind()rbind()增长它会出现什么问题? 如果先前未知道行数和列数,是否需要从NULL增长?从NULL增加矩阵R

编辑:我的问题是由于需要了解有效编写R代码的方法。矩阵上下文更一般,我可能正在寻找关于处理其他数据对象的有效方法的建议。 道歉太过于抽象/一般,但我并没有真正想到具体的问题。

回答

2

如果您提供了有关您要做什么的更多详细信息,这将有所帮助。

一个“问题”(如果有的话)是每次“增长”矩阵时,实际上都是从头开始重新创建整个矩阵,这是一种非常低效的内存。在R中没有这样的值插入到矩阵中。

另一种方法是将每个对象存储在本地环境中(使用assign()函数),然后在知道如何组装矩阵有很多对象(与get())。

+0

小澄清。我相信你是正确的,增长矩阵效率低下(虽然实际上是时间效率低下,而不是内存效率低下)。但我相信R解释程序*可以有效地更新矩阵或向量中的单个单元格。那就是:'a < - rep(1,10);一个[[1]] < - 2'不会复制第二个赋值中的整个向量,因为它是一个纯粹功能的实现。 (这是阅读钱伯斯的书 - 有知识的R源的人请纠正,如果错了!) – Harlan 2009-11-22 23:21:39

+0

正确,但做一个更新是不一样的事情,作为NULL开始作为NULL,然后“添加”它与rbind/cbind(如问题中所述)。在你的例子中,你从矢量大小10开始,然后更改值。使用rep初始化正确的大小,然后更改值*非常高效。 – Shane 2009-11-23 00:22:16