找不到前向箭头操作符

时间:2017-07-05 10:29:29

标签: r operators assignment-operator

我对->的性质感到困惑,我无法像其他运算符一样得到它的定义,它的行为与<-不同。见下文:

print(`<-`) # .Primitive("<-")
print(`->`) # Error in print(`->`) : object '->' not found

另外,我无法劫持它,但如果我尝试R,R不会触发任何错误:

`->` = `+`  # attempting to hijack `->`, no error
print(`->`) # function (e1, e2)  .Primitive("+"), seems like it worked
1 -> 3      # Error in 3 <- 1 : invalid (do_set) left-hand side to assignment
1 -> test1
print(test1) # 1, hijacking failed
`->`(1,3)   # 4, this works

使用<-(或我尝试的任何其他操作员),我可以这样做:

`<-` = `+`   
print(`<-`)
1 <- 3      # 4
1 <- test2  # Error: object 'test2' not found

rm(list=ls()) # back to sanity

那是怎么回事?

2 个答案:

答案 0 :(得分:4)

> e <- quote(42 -> x)
> e
x <- 42

R中只有一个赋值运算符:<-(好吧,两个:那里有=但是不要让事情复杂化。 解析器解释符号&#34; ->&#34;作为赋值,并创建表达式,就像使用<-一样。

答案 1 :(得分:2)

更多的评论而不是答案,但可能很长。

似乎->由解析器处理,解析器检测分配的左侧和右侧,然后调用<-。跟随你的黑客:

`<-` = `+`
1 -> 3
#[1] 4

看看发生了什么? ->运算符基本上没有时间执行,因为解析器不允许它,除非您明确地调用它:

`->` = `+`
`->`(5,6)
#[1] 11