【发布时间】:2012-06-12 13:12:51
【问题描述】:
The manual 状态:
操作符‘
The question here 提到在函数调用中使用时的区别。但在函数定义中,似乎可以正常工作:
a = function ()
{
b = 2
x <- 3
y <<- 4
}
a()
# (b and x are undefined here)
那么为什么手册会提到the operator ‘=’ is only allowed at the top level??
language definition 中没有任何内容(没有列出 = 运算符,真可惜!)
【问题讨论】:
-
您引用的文本说“在子表达式的括号列表中的顶级 OR”。您在子表达式的花括号列表中使用它。这是允许的。
-
你必须不遗余力地找到一个既不是顶层也不是大括号内的表达式。这是一个。有时您希望将赋值封装在
try块中:try( x <- f() )可以,但try( x = f(x) )不行——您需要更改赋值运算符或添加大括号。 -
另一个例子是当您将表达式包装在
system.time调用中时:system.time(a <- runif(10000))。我几乎只使用 = 赋值,也没有遇到很多问题。 -
system.time(notanargumentofsystem.time = 1) 哦,混蛋
-
@GavinSimpson 我相信
fun(a <- 1)的混乱程度大于a <- 1; fun(a)的好处。在其他语言中很少看到赋值代替函数参数。 R 是一种奇怪但无论如何都很棒的语言。<-在任何地方工作都是危险的,而我过去看到的另一个危险是当人们的意思是x smaller than negative 1时,他们忘记了空格并以x<-1结束(你可能会笑,但它确实发生了)
标签: r assignment-operator