我似乎无法理解R保存数据的位置ecdf.以下是一些代码来说明这一点:
> set.seed(2016-10-30)
> x <- rnorm(1e4)
> y <- ecdf(x)
> object.size(x)
80040 bytes
> object.size(y)
3896 bytes
> rm(x)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 602079 32.2 1168576 62.5 750400 40.1
Vcells 1183188 9.1 299644732 2286.2 750532746 5726.2
> object.size(y)
3896 bytes
> plot(y) # still works...
>
Run Code Online (Sandbox Code Playgroud)
如果y的大小很小,则意味着数据被保存在某处.它显然没有保存在x中(因为我删除了它).
函数闭包,@ hadley的Advanced R中的封闭,执行和调用环境都有很棒的解释.
对于您的具体示例,如注释中所述,对象的大小及其封闭环境要大得多:
pryr::compare_size(y)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法查看此对象所包含的对象及其相对大小:
sapply(codetools::findGlobals(y), function(x) object.size(get(x, environment(y))))
Run Code Online (Sandbox Code Playgroud)
您可以对最后一个向量求和,以确定这确实pryr::object_size是报告的内容(在我的机器上为164 kB).