2010-05-18 60 views
2

請原諒我的無知,因爲我不是計算機工程師,而是生物學的根。我已經成爲預先分配對象的好粉絲(帕特里克伯恩斯的SO和R地獄的榮譽),並希望改善我的編碼習慣。代替這個事實,我一直在考慮編寫更高效的函數,並且有以下問題。R中的整潔/高效函數寫入(垃圾回收)

移除在下一個循環開始時將被覆蓋的變量是否有任何好處,或者這只是浪費時間?爲了論證,我們假設新變量和新變量的大小非常相似或相同。

回答

1

不需要自動垃圾回收就可以了。

2

我認爲這將取決於案件的具體情況。在某些情況下,當對象很大時,rm()它可能是一個好主意,特別是如果它不是必需的,並且在它被覆蓋之前還有很多其他事情要做。但是,再次說明,從計算時間的角度來看,這種策略可能是昂貴的,這並不是不可能的。

知道它是否真的值得的唯一方法是嘗試兩種方法並檢查system.time()。

+0

+1使用'system.time()'檢查性能。您還可以查看諸如「Rprof」或「profR」之類的代碼來分析代碼。看到這個問題的例子:http://stackoverflow.com/questions/2476946/creating-large-xml-trees-in-r。 – Shane 2010-05-18 13:11:00

+0

通過「rm(list = ls())」刪除所有對象後,使用的內存保持不變。什麼可能導致這種現象? – pengchy 2015-11-21 06:39:10