R中的功能是“ for”吗?

aaf*_*lei 9 r

在诺曼·马特洛夫(Norman Matloff)的《 R编程的艺术》的 307 页中,作者说

for() 实际上是一个功能。

上下文是对一段代码片段的说明

for (i in 1:length(x)) z[i] <- x[i] + y[i]
Run Code Online (Sandbox Code Playgroud)

作者评论

尽管从语法上看,循环看起来是无害的,但for()实际上是一个函数。

我的理解是他在说的for()是一个函数,就像+一个函数(可调用对象)一样。假设我们可以+通过标准的函数调用方式进行调用,例如

"+"(3 ,5)  # 8
Run Code Online (Sandbox Code Playgroud)

我有C / C ++和Python的背景知识,并且注意到两种语言之间的细微差别。例如,

  • return是R中的一个函数,而不是一个语句,因此我们必须return(1)在括号中编写。

回到我的问题:forR中是否有函数?

感谢您的澄清。

Moo*_*per 4

for是一个函数,但该符号for也被解析器识别为我们可以用来调用该函数的便捷语法的一部分for。这是两个不同的东西,方便地命名为相同(请注意,这in不是一个函数)。

is.function(`for`)
#> [1] TRUE

x <- y <- z <- 1:3
for (i in 1:length(x)) z[i] <- x[i] + y[i]
z
#> [1] 2 4 6

x <- y <- z <- 1:3
`for`(i, 1:length(x), z[i] <- x[i] + y[i])
z
#> [1] 2 4 6
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.2.1)于 2019-05-19 创建

以类似的方式,if (cond) foo else bar语法映射到函数调用`if`(cond, foo, bar),但没有else函数。

所有其他控制流构造(请参阅参考资料?Control)也是函数。