R 赋值运算符

3

我正在查看R语言赋值运算符,并试图理解它们的工作原理,因此编写了以下代码:

> somevar1 <- "stuff1"
> "stuff2" -> somevar2
> somevar3 = "stuff3"
> "stuff4" <- somevar4
Error: object 'somevar4' not found
> "stuff5" = somevar5
Error: object 'somevar5' not found
> `<-`(somevar6, "stuff6")
> `=`(somevar7, "stuff7")
> `=`("stuff8", somevar8)
Error: object 'somevar8' not found
> `->`("stuff9", somevar9)
Error in `->`("stuff9", somevar9) : could not find function "->"
> `<<-`(somevar10, "stuff10")
> `->>`("stuff11", somevar11)
Error in `->>`("stuff11", somevar11) : could not find function "->>"

从代码开始到使用somevar9时,一切都符合预期。但是我不明白为什么出现错误,如:Error in ->("stuff9", somevar9) : could not find function "->"Error in ->>("stuff11", somevar11) : could not find function "->>"。难道->->>操作符不需要存在吗?谢谢!


2
我认为当 R 解析器遇到 a -> b 时,它会调用 '<-'("b", a),而当它遇到 a ->> b 时,它会调用 `'<<-'("b", a)"。 - Allan Cameron
是的,我不是专家,所以不会回答,但是支持@Allan Cameron的观点,你可以通过键入“<-”和“<<-”来查看这些函数的存在,并尝试使用相反的“->”和“->>”。 - caldwellst
1
Colin Fay的文章提出了一些有趣的后续问题,涉及传统操作符:=_。例如,可以使用没有%%的中缀操作符。同样值得注意的是它们的优先级 - Donald Seinen
x = y <- 15 - 我不知道你可以这样做!非常感谢@DonaldSeinen分享这篇文章! - abudis
1个回答

7
当 R 解析器遇到 a -> b 时,它会调用 '<-'("b", a);当它遇到 a ->> b 时,它会调用 '<<-'("b", a)
如果我们执行以下操作,就可以明确地看到这一点:
as.call(quote(a <- 1))
#> a <- 1
as.call(quote(a <<- 1))
#> a <<- 1
as.call(quote(1 -> a))
#> a <- 1
as.call(quote(1 ->> a))
#> a <<- 1

reprex包 (v2.0.1) 创建于2022年1月27日


好的,谢谢!很有道理。 我认为expr函数是rlang包的一部分,所以我用bquote检查了它,就像这样: as.call(bquote(a ->> 1)) - abudis
1
@abudis 你是对的。我已经将其更改为基本R的 quote - Allan Cameron

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