作者:水月琴轩_452 | 来源:互联网 | 2022-12-02 18:15
根据R手册,
运算符<- 可以在任何地方使用,而operator =仅允许在顶层(例如,在命令提示符下键入的完整表达式中)
所以,我想RM(名单<-ls()),因为<- 如上面所述的操作可以在任何地方使用,但[R给了我一个错误说"......必须包含名称或字符串".
rm(list = ls())没有任何问题.据我所知,<- 是一个更普遍的任务,而=可以在更严格的情况下使用.但是为什么使用<- 在'rm'函数时会出错?
1> MrFlick..:
这是因为rm()
默认情况下使用非标准评估.它会尝试删除您为非list=
(pos=
或env=
或inherits=
)参数输入的字面值.
所以你可以做到
a <- 10
rm(a)
请注意,a
它只是被解释为符号.它没有被评估为返回值.当你打电话的时候,rm(list<-ls())
你期待评估表达式,但事实并非如此.它试图找到一个名为变量,"list<-ls()"
但不存在这样的变量,因为没有变量应该有这样的名称.此外,它必须是"有效"的变量名称.从?make.names
帮助页面
语法上有效的名称由字母,数字和点或下划线字符组成,以字母或点开头,后面没有数字
这意味着它不会解析不常见的变量名称,例如您可以通过使用后标记或单引号转义符号来进行解析.从技术上讲,你也可以这样做
a <- 10
rm("a")
因为非标准评估检查参数是否是文字字符值.但它仍然不会评估任何表达式,即使它们最终会返回一个字符值.例如
a <- 10
b <- "a"
rm(b)
上面发生的b
是删除,而不是a
.
如果要传递一个将变量名称作为stirngs返回的函数(同样ls()
如此),则需要使用named list=
参数.该<-
运营商不作为替代工作=
的命名参数.