首页 > 解决方案 > 在 R 中创建一个 for 循环

问题描述

我是 R 的新手,仍在尝试学习如何创建 for 循环。任何人都可以分享如何为h(x,n) = 1+x+x^2 +···+x^n. 非常感谢!

标签: rfor-loop

解决方案


您不需要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

推荐阅读