我运行的是深度嵌套的函数,并且消耗了Windows任务管理器报告的大量内存.输出变量相对较小(比消耗的内存量小1-2个数量级),所以我假设差异可以归因于在函数中某处分配的中间变量(或在被调用的子函数内)和垃圾收集延迟.所以,我的问题是:
1)我的假设是否正确?为什么或者为什么不?
2)简单地嵌入对函数的调用而不是分配中间变量有什么意义吗?这会减少内存使用量吗?
3)假设一个场景,其中R在具有4GB RAM的系统上使用3GB内存.运行gc()后,它现在只使用2GB.在这种情况下,R是否足够智能自行运行垃圾收集,如果我曾经说过另一个耗尽了1.5GB内存的功能?
我正在使用的某些数据集能够在处理系统时因内存耗尽而导致系统崩溃,我正试图缓解这个问题.提前感谢您的任何答案!
玩笑
可能重复:
R是否适用于家庭而不是语法糖
正如标题所说的那样.也许是个愚蠢的问题,但我的理解是,当使用"apply"函数时,迭代是在编译代码中而不是在R解析器中执行的.例如,如果存在大量迭代并且每个操作相对简单,那么这似乎意味着lapply仅比"for"循环更快.例如,如果对lapply中包含的函数的单个调用需要10秒,而且只有12次迭代,我会想到使用"for"和"lapply"之间几乎没有任何区别.
既然我想到了,如果必须解析"lapply"中的函数,为什么使用"lapply"而不是"for"会有任何性能上的好处,除非你正在做一些有编译函数的东西(如总结或乘法等)?
提前致谢!
玩笑
我写了一个函数,当提供一系列日期时,一周中特定日期的名称和某一月份中某一天的发生(例如,每个月的第二个星期五)将返回相应的日期.然而,它不是很快,我不是100%相信它的稳健性.R中是否有一个包或一组函数可以对POSIX对象进行这些操作?提前致谢!