在R语言中,`for`是一个函数吗?

9
在Norman Matloff的《R程序设计艺术》第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)

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

感谢任何澄清。


for 是用 C 语言编写的。值得一看它的源代码以理解其中的原因。这可能不是一个非常琐碎的任务。 - NelsonGon
5
在R语言中,一切都是函数。 - David Arenburg
1
R是一种函数式编程语言。这篇文章可能是一个不错的阅读材料。 - Sonny
2
非常感谢以上的评论。之前我一直在专注于使用R,而最近我开始转向理解R。 - aafulei
我认为你可以在这里找到你问题的答案。 - Scipione Sarlo
1
我刚刚注意到调用 is.function(\for`)is.primitive(`for`)可以工作并显示出 R,如果被询问,会将for` 视为原始函数。 - TimTeaFan
1个回答

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

本文于2019-05-19使用reprex包 (v0.2.1)创建

类似地,if (cond) foo else bar的语法对应于函数调用`if`(cond, foo, bar),但没有else函数。

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


1
感谢您的详细解释。 - aafulei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接