【问题标题】:How to write and calculate Sum/ Product (of a function) in R如何在 R 中编写和计算 Sum/Product (of a function)
【发布时间】:2017-04-03 12:21:19
【问题描述】:

假设我有一个函数,比如说f(x)

对于给定的 x 限制,我如何编写此函数的乘积或总和。

例如f 的乘积为x=1 直到x=5 f(1)*f(2)*f(3)*f(4)*f(5)

另外,我需要计算总和/双倍总和。 考虑f(x,y) 和 x 从 1 到 3 和 y 从 0 到 x-1 的总和。 如果用mathematica编写,它会是这样的: Sum[f[x, y], {x, 1, 3}, {y, 0, x - 1}] 输出将是这个 f[1, 0] + f[2, 0] + f[2, 1] + f[3, 0] + f[3, 1] + f[3, 2]

为简单起见,未定义f

编辑:按要求提供示例:

f <- function (x,y) { 
x + 2*y 
} 

计算 x 从 1 到 3 和 y 从 0 到 x-1 的总和。 (这等于 22 btw)

【问题讨论】:

  • 请展示一个可重现的例子
  • 请定义f。如果f 是矢量化的,你可以简单地做sum(f(1:5))。如果不是,您可以对其进行矢量化或使用 for 循环。
  • @Vandenman 为了简单起见,我们说f &lt;- function(x) { x+x^2}
  • 那个函数是矢量化的,所以你可以做f &lt;- function(x) x + x^2; sum(f(1:5))
  • 好的,但是 product 或 double sum 怎么样,其中一个变量是基于另一个变量定义的,如我的问题所示。让我们考虑一下:f &lt;- function (x,y) { x + 2*y } 我需要计算 x 从 1 到 3 和 y 从 0 到 x-1 的总和。 (这等于 22 btw)

标签: r sum


【解决方案1】:

你可以这样做:

f <- function (x,y) { 
  x + 2*y 
}
)

#calculate f for all combinations
tmp <- outer(1:3, 0:2, f)

#discard undesired combinations and sum
sum(tmp[lower.tri(tmp, diag = TRUE)])
#[1] 22

或者,您可以使用循环仅创建所需的组合。这要慢得多:

inds <- lapply(1:3, function(x) data.frame(x = x, y = 0:(x-1)))
inds <- do.call(rbind, inds)
sum(do.call(f, inds))
#[1] 22

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-31
    • 2020-07-11
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    相关资源
    最近更新 更多