R 理解:`+`(1,`*`(2,3))以及如何更好地对其进行编码
这个代码是什么:R 理解:`+`(1,`*`(2,3))以及如何更好地对其进行编码,r,R,这个代码是什么:`+`(1,`*`(2,3))应该在R中做什么?它能以更典型的方式编码吗?如何使用?如果使用带引号的运算符(例如,`+`或`*`),则实际使用的是具有典型函数语法的标准运算符 假设您想用这种方法计算1+2。你可以这样做: `+`(1, 2) ## Please call the sum operator using 1 and 2 as arguments. 因此,由于您发布的表达式是`+`(1,`*`(2,3)),因此它基本上是求和运算符,其参数是1,其结果是乘积运算符,其参
`+`(1,`*`(2,3))
应该在R中做什么?它能以更典型的方式编码吗?如何使用?如果使用带引号的运算符(例如,`+`
或`*`
),则实际使用的是具有典型函数
语法的标准运算符
假设您想用这种方法计算1+2
。你可以这样做:
`+`(1, 2) ## Please call the sum operator using 1 and 2 as arguments.
因此,由于您发布的表达式是`+`(1,`*`(2,3))
,因此它基本上是求和运算符,其参数是1
,其结果是乘积运算符,其参数是2
和3
最后,一种典型的方法是1+(2*3)
这是R中的“直接”函数调用。回想一下,一切都是函数,甚至是操作符。更全面的细节
简而言之,这里的内容是由内而外的1+2*3
:
- 我们首先使用
作为乘法函数的调用2*3
- 它的结果是1之外的第二个参数
> 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
请注意,它与更传统的中缀表示法是相同的解析树:
> 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
> quote(`+`(1, `*`(2, 3)))[c(1,2,3)]
1 + 2 * 3
> z <- quote(`+`(1, `*`(2, 3)))
> z[1:length(z)]
1 + 2 * 3
您可以恢复中缀符号:
> 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
> quote(`+`(1, `*`(2, 3)))[c(1,2,3)]
1 + 2 * 3
> z <- quote(`+`(1, `*`(2, 3)))
> z[1:length(z)]
1 + 2 * 3
>quote(`+`(1,`*`(2,3))[c(1,2,3)]
1 + 2 * 3
>z[1:长度(z)]
1 + 2 * 3
显然,这是R特有的,但许多其他编程语言也使用它。正确的术语实际上是波兰语表示法,它是一种明确确定顺序的方法,不需要括号,这对于解析器/解释器来说非常方便
如果你想读更多的话,这里有一些很好的信息。应该是这样吗"我们首先有
2*3
?是的,会修正的。谢谢。它不是真正的波兰符号,因为每个函数的参数列表都有括号分隔。@HenningMakholm,好的,修改过的波兰符号。括号是特定的R,它是函数语法。这是相同的基本思想,与我认为的问题非常相关。H太有意思了。在Haskell中,你在函数周围使用`使其成为中缀运算符!