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