R 获取当前调用的函数以编写匿名递归函数

R 获取当前调用的函数以编写匿名递归函数,r,R,如何在递归应用的函数中获取当前函数?以下是一个简单的例子: myfun <- function(x) { if(is.list(x)){ lapply(x, myfun) } else { length(x) } } 另外,match.call()[[1]]对匿名函数也没有帮助。我想,您需要的是: 实际上他说: 另一种编写匿名递归函数的方法 其思想是在本地定义名称: local(myfun <- function(...) { ... myfun(...

如何在递归应用的函数中获取当前函数?以下是一个简单的例子:

myfun <- function(x) {
  if(is.list(x)){
    lapply(x, myfun)
  } else {
    length(x)
  }
}

另外,
match.call()[[1]]
对匿名函数也没有帮助。

我想,您需要的是:

实际上他说:

另一种编写匿名递归函数的方法

其思想是在本地定义名称:

local(myfun <- function(...) { ... myfun(...) ... })
local(myfun系统函数(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

很好,但是为什么您要将
lappy()
转换为
x[-1]
而不是
x
?@JoshO'Brien很好的捕获。我用类似
sys.function(0)(x[-1])
的东西测试了它,没有
lappy
。。。
local(myfun <- function(...) { ... myfun(...) ... })
(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