我試圖了解 R 中的記憶體分配。所以我填充了兩種結果相同的方法。那么這是否意味著分配較少的方法是有效的
例如
## Method 1
f <- function(num) {
for(i in seq_len(num)) {
cat("Hello, world!\n") }}
object.size(f(1))
Hello, world!
0 bytes
## Method 2
asd <- "Hello, world!"
object.size(asd)
120 bytes
因此,如果您在上面看到,方法 1 比方法 1 更有效,對吧?(分別為 0 和 120 位元組)
我的理解正確嗎?
uj5u.com熱心網友回復:
你不是在比較喜歡和喜歡。您的函式列印"Hello, world!"但不回傳任何內容。因此,當您運行時object.size(f(1)),您實際上是在運行object.size(NULL),即 0(什么都沒有的大小)。
如果您更改函式以使其回傳字串,則它等效于方法 2(為字串賦值):
f <- function(num) {
for (i in seq_len(num)) {
return("Hello, world!\n")
}
}
object.size(f(1)) # 120 bytes
object.size(f(1)) == object.size("Hello, world!") # TRUE
無論哪種情況,您都在測量字串的大小。但是,在這種情況下簡單地分配字串將使用更少的 RAM,因為函式本身會占用記憶體空間:
object.size(f) # 16088 bytes
即使是 R 中的一個空函式也會占用大約 4k 的 RAM:
g <- function() {
return(TRUE)
}
object.size(g) # 4384 bytes
話雖如此,鑒于在 R 中您通常使用 RAM 中保存的資料,相比之下,開銷存盤函式的數量通常可以忽略不計。大多數時候,在 R 中,您將希望優化代碼的清晰度(即使用函式),而不是少量的 RAM。不過也有例外(例如,在回圈中呼叫一個函式數百萬次)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414701.html
標籤:
上一篇:按特定順序合并兩個矩陣
下一篇:在R中創建條件虛擬變數列
