什么时候值得在R函数中使用'remove'? < >在决定是否移除< /代码>时,我应该考虑哪些因素?在函数中不被再次使用的变量?

什么时候值得在R函数中使用'remove'? < >在决定是否移除< /代码>时,我应该考虑哪些因素?在函数中不被再次使用的变量?,r,performance,function,R,Performance,Function,下面是一个简单的例子: DivideByLower b){ tmp来自: 在某些语言中,您必须显式删除未使用的对象,以便 R使用另一种方法:垃圾 收集(简称GC)。当 对象不再使用。它通过跟踪有多少个名称来完成此操作 指向每个对象,当没有名称指向 对象,它将删除该对象 在您描述的情况下,垃圾收集将释放内存 如果函数的输出是另一个函数,那么Hadley将这些函数分别命名为函数工厂和制造函数,在函数工厂主体中创建的变量将在制造函数的封闭环境中可用,并且不会释放内存 更多信息,仍在哈德利的书中,可以在

下面是一个简单的例子:

DivideByLower b){
tmp来自:

在某些语言中,您必须显式删除未使用的对象,以便 R使用另一种方法:垃圾 收集(简称GC)。当 对象不再使用。它通过跟踪有多少个名称来完成此操作 指向每个对象,当没有名称指向 对象,它将删除该对象

在您描述的情况下,垃圾收集将释放内存

如果函数的输出是另一个函数,那么Hadley将这些函数分别命名为函数工厂和制造函数,在函数工厂主体中创建的变量将在制造函数的封闭环境中可用,并且不会释放内存

更多信息,仍在哈德利的书中,可以在关于的章节中找到


function\u factory大多数情况下答案都是否定的。如果在函数执行过程中没有内存问题,为什么还要麻烦呢?看起来你已经发现了编写R代码的一个重要教训:使用函数!如果你编写函数来代替代码中的繁重任务,那么垃圾收集等很多事情都会变得容易得多我同意@RuiBarradas的观点,除非你开始遇到问题,否则你不应该担心优化你在R中的表现。@AndrewBrēza同样重要的是,R核心团队的许多成员多年来一直说,通常没有必要显式调用
gc
,当变量不再存在时,内存将被释放,垃圾回收将发生。@RuiBarradas这是一个很好的观点。函数的一个优点是中间变量会被自动删除。例如,如果我在中创建
dataset\u original
dataset\u in\u progress
dataset\u final
在全局环境中,在删除数据集之前,我将有三个数据集副本。如果我在函数中进行分析,前两个将被删除,只返回第三个。管道使这种情况变得不太常见,但有时出于某种原因,我仍然不得不创建数据副本。