首页 > 解决方案 > R: `rm(list=ls())` 有什么作用?

问题描述

在查看其他人编写的一些 R 代码时,我发现文档顶部附近rm(list=ls())。我尝试查找该rm函数的作用,据我所知,它会从工作区中删除指定的变量,因此如果您有x=3某个地方,那么在运行rm(x)该变量之后,它的x行为就好像它从未被分配过(例如,会抛出如果您尝试打印它会出错)。

但是如果我有这个权利,那么其余的代码就很奇怪了,因为它似乎正在删除空列表。所以它根本没有做任何事情,对吧?这里有这个代码的理由吗?

标签: r

解决方案


我认为该rm函数的参数列表令人困惑,至少在我开始使用 R 时是这样。list参数实际上不应该是一个列表,而是一个字符向量。-functionls确实返回在调用它的环境中可见的所有命名对象的字符向量,并且如果没有为其envir参数提供其他值,则使用默认值。如果您在控制台执行此操作,则默认环境是全局环境。因此,这将清除所有“可见”对象(但不会清除在其他命名空间或环境中定义的对象,例如存在于、base或其他加载的包命名空间中的对象。graphicsstats

所以现在去看看?ls?rm更好地了解他们的能力。特别是新用户应该清楚地了解 R 之间的差异names,即symbols与它们的字符表示。该ls函数实际上进入了 R 实现的语言级别并返回一个非语言级别的值,而rm通常需要一个语言级别的输入......除非(在这种情况下)它被提供了一个值到它的“列表” -参数,...这不是 R 列表。清除?也许,希望,更是如此。


推荐阅读