清除R环境中所有的对象和包

8
我尝试了这个命令。
remove(list = ls())

我希望清除所有R环境(对象、包)


3
如果您想清除已加载的包,可以重新启动R。您还可以使用detach命令。 - yarnabrina
@Ronak Shah remove和rm之间有什么区别吗? - yarnabrina
@yarnabrina 不是的,它们是相同的函数。在定义了rm之后,定义就是remove <- rm。这可以在源文件src/library/base/R/rm.R中看到。 - Rui Barradas
3个回答

14

最简单、更重要的是,唯一可靠的方法是重新启动R。这可以解决所有问题。

只需确保在退出R时不要意外保存当前R镜像。

在RStudio中,您需要设置选项“退出时保存工作区到.RData文件”为“从不”,并禁用重新启动时的恢复 — 这是强烈推荐的!

RStudio preferences

之后,请确保项目文件夹中的任何已存在的.RData文件都被删除(注意:.RData是一个隐藏的文件,因此您通常不会在文件浏览器中看到它;您可以通过命令行删除它)。

要在RStudio内重新启动R,您可以使用“Session” › “Restart R”或Cmd+Shift+F10


2
"最初的回答"已经存在了 :-) https://dev59.com/_Ws05IYBdhLWcg3wAdST#7506112 根据这个答案,下面的代码应该可以工作。
lapply(paste("package:", names(sessionInfo()$otherPkgs), sep=""), 
       detach, 
       character.only = TRUE, 
       unload = TRUE)

你可以查看最初的回答以了解完整描述。

1
如果问题已经在其他地方有了答案,应该将其标记为重复而不是回答它。请阅读常见问题解答如何处理重复的问题?:“这是一个重复的问题。我该怎么办?如果您有投票关闭的特权,请在问题下面点击“关闭”按钮,选择“重复于...”,并粘贴重复问题的链接。”“我应该回答吗?不,如果您认为这是一个重复的问题,则不需要回答。” - Ronak Shah
2
如果不同加载的包之间存在依赖关系,这种方法可能无法可靠地工作。即使没有这个问题,它也可能无法可靠地重置所有会话状态。 - Konrad Rudolph
这个“解决方案”根本没有回答原始问题。 - tagoma

1

freshr包将之前的答案整合成了一个简单的函数。通过以下方式安装它:

install.packages("freshr")

然后运行

freshr::freshr()

在你的控制台中输入它,它将为你卸载所有的包和变量。

1
坦率地说,这是一种糟糕的方法,试图解决一个不存在的问题。首先,这个包实际上并不起作用。它只会尝试卸载所有已加载包的一小部分(sessionInfo()$otherPkgs不完整!),如果有一个包不能被卸载,因为其他包依赖于它,它可能会失败。它还完全忽略了任何可能需要卸载的非包代码(这很好,因为没有处理这种代码的通用解决方案!)。而且,正如其他答案中所解释的那样,这个包完全没有必要:只需重新启动R即可。 - Konrad Rudolph
1
最糟糕的是,通过建议在每个脚本的顶部放置freshr :: freshr()这个软件包积极推广了不良工程实践 - Konrad Rudolph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接