引号和表达

时间:2018-07-24 07:00:02

标签: r

我今天开始学习R语言。

在定义两个向量x,y之后,我应用了两个向量之间的外积,并应用了文档中所述的内容。

f= outer (x, y, FUN = "*")

一切都很棒。 然后我决定尝试使用匿名函数,所以我写了

f= outer (x, y, FUN = "function(x,y) cos(y) / (1+x^2)")

但是我遇到一个错误。但是,如果我写:

`f= outer (x, y, FUN = function(x,y) cos(y) / (1+x^2))`

有效。

为什么引号可以与*一起使用,但不能与该匿名函数一起使用? 谢谢您的时间

1 个答案:

答案 0 :(得分:1)

我不确定您所说的“工作”代码是什么意思:

`f= outer (x, y, FUN = function(x,y) cos(y) / (1+x^2))`

这将尝试访问名为f= outer (x, y, FUN = function(x,y) cos(y) / (1+x^2))变量,例如我可以写:

`f= outer (x, y, FUN = function(x,y) cos(y) / (1+x^2))` = 3
`f= outer (x, y, FUN = function(x,y) cos(y) / (1+x^2))`
# [1] 3

这是一件令人困惑的事情,但是反引号(`)中的对象使您可以声明任意命名的对象。

同样,除非您完全知道自己在做什么(即,远远超过R编程的第一天),否则不要这样做。

无论如何,关于*为什么需要引号,是因为 *运算符 Everything in R is a functionalmost),但是运算符是特殊功能,因为它们使您可以像从左向右书写它们一样:

variable1 operator variable2

代替正常

function(variable1, variable2)

也就是说,所有运算符都具有 functional 形式;但是,为了区分功能形式和运算符形式,R解析器需要将它们用引号(或反引号)分开;以下是相同的:

3 * 4
'*'(3, 4)
"*"(3, 4) #single and double quotes in R are basically the same
`*`(3, 4)

FUN的{​​{1}}参数需要功能,而不是运算符,因此我们必须在其{em中使用outer >功能形式,例如*

更多细节-作为代码解析过程的一部分,您可以观察到R在内部将运算符形式转换为功能形式(即,在评估之前,R已经将运算符形式转换为功能形式):< / p>

"*"