在R中创建一个for循环

时间:2018-12-01 23:31:02

标签: r for-loop

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

2 个答案:

答案 0 :(得分:1)

您不需要循环。您需要一个使用矢量化功能-

h <- function(x, n) {
  sum(1, x^seq_len(n))
}

h(2, 2)
[1] 7

答案 1 :(得分:1)

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