5

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

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]]无助于匿名函数。

4

2 回答 2

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
于 2013-10-31T18:58:32.273 回答
1

我认为您正在寻找的是sys.function

> (function() print(sys.function(1)))()
function() print(sys.function(1))

Recall实际上说:

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

这个想法是您在本地定义名称:

local(myfun <- function(...) { ... myfun(...) ... })

它没有在外面定义。

于 2013-10-31T18:47:54.403 回答