nik*_*par 24
如果使用带引号的运算符(例如`+`或`*`),则实际上使用的是具有典型function语法的标准运算符.
假设你想1 + 2用这种方式计算.你可以这样做:
`+`(1, 2) ## Please call the sum operator using 1 and 2 as arguments.
Run Code Online (Sandbox Code Playgroud)
所以,既然你发布的表达式是`+`(1, `*`(2, 3)),它基本上是sum运算符,参数是1和产品运算符的结果,参数是2和3.
最终,一种典型的方法是1 + (2 * 3).
Dir*_*tel 10
这是在R中调用的"简单"函数.回想一切都是函数,甚至是运算符.有关详细信息,请参阅R语言手册,第3节"表达式评估".
简而言之,你在这里所拥有的是1 + 2 * 3从内到外:
2 * 3调用乘法函数这显示了如何通过使用"["和"[["运算符来拉出树的分支来开始遵循该"功能"表达式的解析树.R中的表达式存储在列表中:
> quote(`+`(1, `*`(2, 3)))[1]
`+`()
> quote(`+`(1, `*`(2, 3)))[2]
1()
> quote(`+`(1, `*`(2, 3)))[[2]]
[1] 1
> quote(`+`(1, `*`(2, 3)))[3]
(2 * 3)()
> quote(`+`(1, `*`(2, 3)))[[3]]
2 * 3
Run Code Online (Sandbox Code Playgroud)
请注意,它与更常规的中缀表示法是相同的解析树:
> quote(1+(2*3))[1]
`+`()
> quote(1+(2*3))[2]
1()
> quote(1+(2*3))[3]
(2 * 3)()
> quote(1+(2*3))[4]
NULL()
> quote(1+(2*3))[3][1]
(2 * 3)()
> quote(1+(2*3))[3][[1]]
(2 * 3)
> quote(1+(2*3))[3][[1]][[1]]
`(`
> quote(1+(2*3))[3][[1]][[2]]
2 * 3
> quote(1+(2*3))[3][[1]][[2]][[1]]
`*`
> quote(1+(2*3))[3][[1]][[2]][1]
`*`()
> `+`(1, `*`(2, 3))
[1] 7
Run Code Online (Sandbox Code Playgroud)
你可以恢复中缀表示法:
> quote(`+`(1, `*`(2, 3)))[c(1,2,3)]
1 + 2 * 3
> z <- quote(`+`(1, `*`(2, 3)))
> z[1:length(z)]
1 + 2 * 3
Run Code Online (Sandbox Code Playgroud)