R:创建具有任意长表达式的函数

时间:2014-05-31 23:34:54

标签: r function for-loop

虽然我的原始问题更为笼统,但为了使事情更加全面,我正在制定下面的部分案例, - 我希望它的解决方案/答案可以作为更一般性问题的答案。

问题:

  • 整合函数f(x)=(...(((x ^ x)^ x)^ x)... ^ x)^ x(... xn次)间隔(0,1)

非常感谢任何想法!

PS:拜托,请不要尝试以数学方式解决问题或简化表达式(例如,用泰勒展开来近似结果,无论如何),因为它不是主题(但是,我试图选择)这样一个例子,不应该有任何简单的转换)

P.S.2:原始问题(这里不需要答案,因为预计发布的问题的答案对原始问题有效):

如果在R中可以创建具有任意长表达式的函数(避免“手动”定义)。例如,为n = 5设置手动给定函数很容易:

f<-function(x) {
((((x^x)^x)^x)^x)^x
}

但是如果n = 1'000或1'000'000 怎么办? 似乎简单的循环在这里不合适......

1 个答案:

答案 0 :(得分:2)

从Rhelp复制:你应该看看:

 # ?funprog   Should have worked but didn't. Try instead ...
 ?Reduce

有几个重复应用功能参数的例子。还包括功能列表。

一个例子:

Funcall <- function(f, ...) f(...)  # sort of like `do.call`
Iterate <- function(f, n = 1)
   function(x) Reduce(Funcall, rep.int(list(f), n), x, right = TRUE)

Iterate(function(x) x^1.1, 30)(1.01)
#[1] 1.189612