描述这种节省/差异的一般公式是什么?通过使用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