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
不是函数,它是给定参数 x
和 i+1
.
的函数 find_duplicates
的输出
所以在 if
子句中键入 rest
或 find_duplicates(x, i + 1)
确实是一样的,它们都是值,而不是函数。
以下简单递归查找向量中的重复元素。它摘自 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
不是函数,它是给定参数 x
和 i+1
.
find_duplicates
的输出
所以在 if
子句中键入 rest
或 find_duplicates(x, i + 1)
确实是一样的,它们都是值,而不是函数。