如何在函数中获取递归应用的当前函数?这是一个简单的例子:
myfun <- function(x) {
if(is.list(x)){
lapply(x, myfun)
} else {
length(x)
}
}
我想让它匿名,但我不知道如何告诉lapply
在没有名字的情况下使用当前函数。我尝试了Recall
,但这不起作用:
(function(x) {
if(is.list(x)){
lapply(x, Recall)
} else {
length(x)
}
})(cars)
同样match.call()[[1]]
对匿名函数没有帮助。
答案 0 :(得分:4)
例如,sys.function(0)
以递归方式计算列表的平方:
(function(x) {
if(length(x)>2){
lapply(x,sys.function(0))
} else {
x^2
}
})(list(1,2,3))
[[1]]
[1] 1
[[2]]
[1] 4
[[3]]
[1] 9
答案 1 :(得分:1)
我认为您正在寻找的是sys.function
:
> (function() print(sys.function(1)))()
function() print(sys.function(1))
Recall
实际上说:
local
用于编写匿名递归函数的另一种方法。
我们的想法是您在本地定义名称:
local(myfun <- function(...) { ... myfun(...) ... })
并且没有在外面定义。