首页 > 解决方案 > 计算嵌套总和

问题描述

我想在 R 中计算以下类型的东西:

公式

重要的是,被加数可以是任何函数 f(y,x)。

到目前为止,我的方法是使用嵌套的 for 循环:

n <- 5
fun <- function(y,x){y^2 + sqrt(y*x)} # might be any function of y and x
sum_x <- c()
for(x in 1:n){
  sum_y <- c()
  for(y in 0:x){
    sum_y[y+1] <- fun(y,x)
  }
  sum_x[x] <- sum(sum_y)
}
sum(sum_x) # 147.6317

但是,我不喜欢这种方法。如果下限和上限需要更灵活,这非常难看并且变得非常不方便。我考虑过使用expand.grid然后将其应用于funmapply,但无法弄清楚如何表达总和的嵌套结构。任何建议如何做到这一点?

标签: rapply

解决方案


您可以outer根据功能执行产品。该外积将查看两个输入变量的所有组合并将结果放入矩阵中;它采用以下形式:

outer(<rows>, <cols>, FUN)

具体而言,以下内容就足够了:

n <- 5

fun <- function(x, y) {ifelse (y > x, 0, y^2 + sqrt(x * y))}

outer(1:n, 1:n, FUN = fun) %>% sum() # 147.6317

由于yrange from0和同时y出现在这两个术语中,它默认为0(偶然)。无论如何,在这种情况下,有必要在函数定义中包含某种形式的索引,因为 的嵌套求和y取决于x.


推荐阅读