为什么rm(ls())不起作用,需要“列表”?

时间:2015-09-18 17:25:32

标签: r syntax

我刚刚开始使用“datacamp”网站学习R,并且在开始时遇到了语法误解。

它说rm(list = ls())是一个非常有用的命令,用于清除工作区中的所有内容,但我不明白list =的用途。

  • 一个。他们还没有教我R中=的含义,我没有在文档中找到解释。 =就像<-?有什么不同?

  • 湾如果rm()的输入可以是变量名称列表,并且ls()的输出是var名称列表,为什么我不能只使用rm(ls())

1 个答案:

答案 0 :(得分:4)

按位置与名称传递参数

=符号在命名函数调用的参数时起着特殊作用。

考虑两个基本相同的功能:

f <- function(..., y=3) (2+sum(...))^y
g <- function(y=3, ...) (2+sum(...))^y

如果未命名y=,则结果通常不同:

f(y=5) # 32
g(y=5) # 32

f(5)   # 343
g(5)   # 32

rmf类似,请点击?rm - 所以如果您想致电rm(list = ls()),请将其全部写完。

代表对象名称

在大多数R中,如果你写f(g()),评估自然会流动:

  • g()评估为8并替换为f(g()) f(8)
  • f(8)评估为1000

rm在其未命名的...参数中打破了这种模式,这些参数基本上只存在于交互式使用中。只允许手动输入变量名。†结果,rm(ls())将无法运行。

哈德利威克姆provides another nice example

ggplot2 <- "plyr"
library(ggplot2) # loads ggplot2, not plyr!

†​​好的,您可以使用...而无需手动输入名称,例如

do.call(library, as.list(ggplot2)) # loads plyr!

但除非你知道自己在做什么,否则不要乱用它。