r - 计算嵌套总和
问题描述
我想在 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
然后将其应用于fun
它mapply
,但无法弄清楚如何表达总和的嵌套结构。任何建议如何做到这一点?
解决方案
您可以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
由于y
range from0
和同时y
出现在这两个术语中,它默认为0
(偶然)。无论如何,在这种情况下,有必要在函数定义中包含某种形式的索引,因为 的嵌套求和y
取决于x
.
推荐阅读
- ios - Appstore 根据屏幕需要时间
- python - 调整大小时 GtkDrawingArea 变得混乱
- python - 如何将文件从 Google AI 平台训练作业传输到我的另一个计算实例或本地机器?
- jquery - 我无法使用 .load() 加载 URL
- android - 如何以编程方式获取视频类型 - ExoPlayer 中的 Live 或 DVR
- latex - 如何在表格的单元格中列出带有 itemize 的列表?
- c# - 我无法向资源文件添加记录
- android - 如何从 webview 获取内容并将其显示在 Textview 中
- python-3.x - Tkinter 按钮导致无限循环
- vue.js - 错误:找不到模块'@vue/babel-preset-app'