{for}是R中的函数吗?

时间:2019-05-19 07:13:14

标签: r

作者说,在Norman Matloff的 R编程的艺术 page 307中,

  

for()实际上是一个函数。

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

for (i in 1:length(x)) z[i] <- x[i] + y[i]

作者评论

  

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

我的理解是他在说for()是一个函数,就像+是一个函数(可调用对象)一样。假设我们可以通过类似

的标准函数调用方式来调用+
"+"(3 ,5)  # 8

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

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

回到我的问题:for是R中的一个函数吗?

感谢您的澄清。

1 个答案:

答案 0 :(得分:3)

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

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

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

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