r - 在 R 中创建一个 for 循环
问题描述
我是 R 的新手,仍在尝试学习如何创建 for 循环。任何人都可以分享如何为h(x,n) = 1+x+x^2 +···+x^n
. 非常感谢!
解决方案
您不需要for
循环,但在教学上:
x <- 2 ; n <- 2
ret <- 1
for (i in seq_len(n)) ret <- ret + x^i
ret
# [1] 15
这对我来说看起来很可怕:它可能很清楚(这很好),但在 R 中肯定有更好的方法来做到这一点。(在其他语言中,这正是您可能需要这样做的方式。这很好,它们在矢量化数学中可能不像 R 那样有效。)
好的,让我们对它做一点细化,seq_len(n)
以此为起点。该sapply
函数将为seq
影响范围内的每个值执行提供的函数,因此
1 + sum(sapply(seq_len(n), function(i) x^i))
# [1] 15
这一切都很好,但是它为seq_len(n)
. 让我们只做一次,而不是遍历序列中的每个值:
1 + sum(x^seq_len(n))
# [1] 15
解释:当你这样做时x^seq_len(3)
,这是有效x^c(1,2,3)
的,这实际上是(尽管在语义上不同)c(x^1, x^2, x^3)
,几乎是事物的代数扩展。把它包裹起来sum
很简单。
好的,正如 Shree 所建议的,它可以很容易地成为一个功能来帮助您,以防您需要多次执行此操作。我将减少该示例,因为rep(x,n)
没有必要:
h <- function(x, n) sum(1, x^seq_len(n))
h(x, n)
# [1] 15
推荐阅读
- mongodb - 为什么 DigitalOcean 中的 MongoDB 数据库连接超时错误
- python - Python - 我的输出在 CSV 中反转
- python - 我如何获得 Unix 时间框架,但让我们说一分钟前?
- python - 角色空闲动画
- python - Python LXML 从 Steam Bundle 页面获取数据 - 列出索引错误
- ruby-on-rails - 在 Rails 中弃用所有类方法的最佳方法
- python - Numpy Mean 元素明智地超过 3D 数组
- javascript - D3 强制布局逐步更新
- javascript - 将 Ajax 中的参数传回 MVC 中
- amazon-web-services - 如何为 AWS S3 存储桶中的图像和视频应用元数据