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