HBa*_*Bat 13 memory variables performance r
目前我正在使用相对较大的数据文件,而我的计算机不是超级计算机.我正在临时创建这些数据集的许多子集,而不是从工作区中删除它们.显然,这些正在使许多变量混乱.但是,在R的性能上有许多未使用的变量会有什么影响吗?(即计算机的内存是否在某些时候填满?)
编写代码时,我应该养成去除未使用变量的习惯吗?值得吗?
x <- rnorm(1e8)
y <- mean(x)
# After this point I will not use x anymore, but I will use y
# Should I add following line to my code? or
# Maybe there will not be any performance lag if I skip the following line:
rm(x)
Run Code Online (Sandbox Code Playgroud)
我不想在我的代码中添加另一行.而不是我的代码看起来混乱,我更喜欢我的工作区杂乱(如果没有性能改善).
Hon*_*Ooi 16
是的,拥有未使用的对象会影响您的性能,因为R将其所有对象存储在memry中.显然,小对象的影响可以忽略不计,而且你大多只需要删除非常大的对象(数百万行的数据框等),但是拥有整洁的工作空间不会对任何东西造成伤害.
唯一的风险是删除以后需要的东西.即使按照建议使用回购,意外破坏东西也是你想要避免的.
解决这些问题的一种方法是广泛使用local.当你进行散布在许多临时对象周围的计算时,你可以将它包装在一个local调用中,这将在以后为你有效地处理这些对象.没有更多的清理大量的i,j,x,temp.var,和诸如此类的东西.
local({
x <- something
for(i in seq_along(obj))
temp <- some_unvectorised function(obj[[i]], x)
for(j in 1:temp)
temp2 <- some_other_unvectorised_function(temp, j)
# x, i, j, temp, temp2 only exist for the duration of local(...)
})
Run Code Online (Sandbox Code Playgroud)
除了上述建议之外,为了帮助像我这样的初学者,我想列出一些检查R内存的步骤:
ls()。object.size("Object_name")rm("Object_name")gc()memory.size()如果您使用的是新会话,请使用,rm(list=ls())然后使用gc()。
如果有人觉得删除未使用的变量的习惯很危险,那么将对象偶尔保存到R图像中始终是一个好习惯。
我认为无论语言如何,删除未使用的代码都是一个很好的编程实践。
使用 Subversion 或 Git 等版本控制系统来跟踪更改历史记录也是一个很好的做法。如果您这样做,您就可以放心地删除代码,因为如果需要,总是可以回滚到早期版本。
这是专业编码的基础。
| 归档时间: |
|
| 查看次数: |
7066 次 |
| 最近记录: |