rm()和rm(list=ls())有什么区别?

18

我读过的大部分文章都建议使用rm(list=ls()),但我不知道如果我想使用rm()会有什么区别。

如果我想清除所有变量,我可以使用rm()代替rm(list=ls())吗?

请给我一些建议。谢谢。


3
rm() 单独使用不会有任何作用。 - SymbolixAU
3
请尝试查看 ?rm?ls。如果您执行 ls(),它将列出全局环境中的变量。 - din
2个回答

18

命令rm(list=ls())会从当前工作区(R内存)中删除所有对象,而单独使用rm()则不会有任何作用。您必须指定要删除的内容给rm()。例如,

a<-1
rm(a)

会从你的工作区中移除对象a。相反地,

a<-1
b<-2
rm(a)

会从内存中移除对象a,但不会影响对象b。以下代码将同时移除ab

a<-1
b<-2
rm(list=ls())

rm(list=ls())rm(a, b)更容易编写,后者还会从环境中删除ab,并且可以扩展到任意数量的对象。想象一下通过名称删除100个对象:rm(a,b,c,d,e,f,g,h)等等...

您可以使用参数list将一堆要删除的对象传递给rm()。因为ls()列出当前工作区中的所有对象,并将其指定为要删除的对象列表,上述命令将从R内存中删除所有对象。


清理 R 内存,我应该使用 gc(),是吗?需要使用 gc(list=ls()) 吗? - poom mce
gc() 是用于垃圾回收的函数,它强制 R 释放可能仍然为操作系统保留的内存。有关更多信息,请参阅 R 中的 ?gc() - user2357031
2
说实话,rm(list= ls())并不能删除以.开头的对象。这些对象可以通过rm(list = ls(all.names = TRUE))来删除,但我更喜欢重新启动R。 - Richard Telford
这个答案不正确。该命令只会从执行它的环境中删除(非“点”)对象,而不会从内存中删除“所有对象”。 - IRTFM

4

rm()基本上是“remove{base}”,它用于从指定环境中删除对象。

命令rm(list=ls())的意思是-

list=ls()在此命令中是基础,这意味着您正在引用工作区中存在的所有对象。

同样,当您使用list=ls()作为基础时,rm()用于从工作区中删除所有对象。

然而, 当涉及到仅使用rm()时,它将不会执行任何操作,因为“base”不存在。

您可以通过将特定变量作为“base”来使用rm()来删除特定变量:

例如

a <-45                                                                          
rm(a)

我认为这可能会让新用户感到困惑。它使用了术语“base”,这也恰好是R程序的核心命名空间的名称。rm()base命名空间中的对象不起作用。 - IRTFM

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