2009-11-20 138 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