描述這種節省/差異的一般公式是什麼?通過使用R中的數組(而不是list,data.frame,data.table)可以保存多少RAM(內存)?
項考慮進行計算:
- 陣列維數(標識列)
- 每個維度的大小(在每種識別列的獨特元素)
- 尺寸大小的產物(數組元素的個數,以上的唯一組合)
- 每個維度的每個元素,當存儲在一個2D中,而不是數組格式(字符,整數,整數64,因子,雙精度,非常可能)時的每個元素的
class()
其他人)
我正在爲R軟件包(半內部軟件包)編寫函數的文檔,我想充分描述這一點。根據我(或你)的想法,我甚至可以編寫一個函數來計算這種差異,這樣用戶就可以在嘗試兩種方式(數據集相當大!)之前看到節省。
編輯:
# starting object
d2 <- data.table(v=rnorm(10))
d2[,c("a","b","d","e"):=replicate(4, sample(1:20, 10), simplify=FALSE)]
setkey(d2, a, b, d, e)
# two casts to compare
d2.cast <- d2[CJ(a,b,d,e)] # 2D structure
dN.cast <- reshape2::acast(d2, a~b~d~e, value.var="v") # N-D structure
# compare sizes
print(object.size(d2.cast), units="Kb")
print(object.size(dN.cast), units="Kb")
打印(object.size(d2.cast),單位= 「KB」)
236.4 KB
打印(object.size(dN.cast) ,單位= 「KB」)
81 KB
並請,如果我使用的術語差,正確的。我想更好地描述這種情況:)
這可能是有用的:http://adv-r.had.co.nz/memory.html – Molx
也'數組'似乎有點小,但沒有那麼多。只是一個簡單的測試:'object.size(lapply(1:100,function(i)lapply(1:100,function(j)rnorm(100))))'and'object.size(array(rnorm(100^3),dim = c(100,100,100)))'。 (分別爲8484840和8000208字節)。 – Molx
@Molx查看清單編輯,附帶示例。 2D對象要大得多,因爲它必須通過定義數組的尺寸來重複僅說明一次的信息。 – rbatt