R递归函数调用,无需声明函数参数即可工作

R recursive function call that works without stating arguments to function

以下简单递归查找向量中的重复元素。它摘自 Thomas Mailund 的第 2 章 R 中的函数式编程:数据科学、分析和金融的高级统计编程。我想知道为什么当我们在函数内部调用 rest 时它会起作用,因为它是在调用一个没有声明参数的函数。

通常这只是 return 函数定义,但在递归函数中我们不需要,我想知道为什么。

如果我们将函数中的 rest 直接替换为 find_duplicates(x, i + 1),我可以看到这将如何工作,但我很难理解为什么它只调用函数所附加的名称.

例如,如果我们定义 f<- function (x) x 并调用 f 它只是 return 代码 function (x) x.

find_duplicates <- function(x, i = 1) {
    if (i >= length(x)) return(c())
   rest <- find_duplicates(x, i + 1)
    if (x[i] == x[i + 1]) c(i, rest)
    else rest
}

rest 不是函数,它是给定参数 xi+1.

的函数 find_duplicates 的输出

所以在 if 子句中键入 restfind_duplicates(x, i + 1) 确实是一样的,它们都是值,而不是函数。