【问题标题】:R: Creating a function with an arbitrarily long expressionR:使用任意长的表达式创建函数
【发布时间】:2014-05-31 23:34:53
【问题描述】:

虽然我最初的问题更笼统,但为了使事情更全面,我仅在下面制定其部分案例, - 我希望它的解决方案/答案将作为更普遍问题的答案。

问题:

  • 在区间 (0 ,1) ?

非常感谢您的任何想法!

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

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

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

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

但是如果 n=1'000 或 1'000'000 呢? 看来这里不适合简单循环了……

【问题讨论】:

  • 在同一天在 SO 和 Rhelp 上交叉发布被认为是不好的形式。
  • foo &lt;- function(f, x, n) Reduce(f, rep(x, n)) 有用吗?其中foo("^", 2, 3) 计算2^2^2。如果这就是您的意思,我可以将其发布为答案。
  • @flodel:我认为它实际上应该是(2^2)^2(对于x=2,恰好也是2^2^2)。
  • @flodel:谢谢你的想法,也许,我不得不提到已经考虑过 和简单的 循环方法。但是对于这两种方法,我只能在给定输入值的情况下计算函数的值。这就是为什么在发布的问题中我要求积分。例如,如果我有fun &lt;- function(x) Reduce("+", rep(x, 5) ),那么integrate(fun, 0, 1) 将产生错误消息:evaluation of function gave a result of wrong length。也许我做错了什么,所以,也许你的集成解决方案会完全回答我的问题。谢谢

标签: r function for-loop


【解决方案1】:

从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2011-06-23
    • 2023-02-04
    相关资源
    最近更新 更多