求R中无for循环的级数的值

求R中无for循环的级数的值,r,vector,R,Vector,我是R的新手,我发现了这个问题: 使用R计算以下总和: 1+(2/3)+(2/3)(4/5)+……+(2/3)(4/5)…(38/39) 我很想知道如何解决这个问题,而不必使用for loop,并且只使用vector操作 我的想法和我迄今为止的尝试: 假设我创建两个向量,例如 x<-2*(1:19) y<-2*(1:19)+1 将创建长度为19的向量,其中将存储2/3,4/5,…,38/39 我正在考虑使用R中的prod功能来查找所需的产品。所以,我创建了一个向量,这样 i<

我是
R
的新手,我发现了这个问题:

使用R计算以下总和: 1+(2/3)+(2/3)(4/5)+……+(2/3)(4/5)…(38/39)

我很想知道如何解决这个问题,而不必使用
for loop
,并且只使用
vector
操作


我的想法和我迄今为止的尝试: 假设我创建两个向量,例如

x<-2*(1:19)
y<-2*(1:19)+1
将创建长度为
19
的向量,其中将存储
2/3
4/5
,…,
38/39

我正在考虑使用
R
中的
prod
功能来查找所需的产品。所以,我创建了一个向量,这样

i<-1:19
但它惨败地给了我这样的结果:

[1] 0.6666667
Warning message:
In 1:i : numerical expression has 19 elements: only the first used

我想做什么: 我希望将
(2/3),(2/3)(4/5),…,(2/3)(4/5)…,(38/39)
的值分别存储在另一个向量(比如
p
)中,因此该向量中包含
19
元素。然后我打算使用
sum
函数来最终找出所有这些函数的总和


我被困在哪里: 如中所述,
prod
函数返回其参数中所有值的乘积。所以

prod(z[1:1])
prod(z[1:2])
prod(z[1:3])
将分别返回
(2/3)、(2/3)(4/5)、(2/3)(4/5)(6/7)
的值,它执行以下操作:

> prod(z[1:1])
[1] 0.6666667
> prod(z[1:2])
[1] 0.5333333
> prod(z[1:3])
[1] 0.4571429
但是不可能像这样继续下去,对向量
z
的所有
19
元素都这样做。我被困在这里,想着能做些什么。我想一个接一个地迭代
z
的所有元素,我为这些元素创建了另一个向量
I
,如上所述,但它没有像我所想的那样进行。关于如何做到这一点,任何帮助/建议/提示都将非常有用。我似乎已经没有什么想法了


更多信息: 在这里,我以系统的方式提供所有输出,以便其他人更好地理解我的问题:

> x
 [1]  2  4  6  8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
> y
 [1]  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
> z
 [1] 0.6666667 0.8000000 0.8571429 0.8888889 0.9090909 0.9230769 0.9333333
 [8] 0.9411765 0.9473684 0.9523810 0.9565217 0.9600000 0.9629630 0.9655172
[15] 0.9677419 0.9696970 0.9714286 0.9729730 0.9743590
> i
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19


简短说明(前面有争议的声明):这篇文章本来会受益于乳胶的使用,但不幸的是,由于极度依赖,正如几篇关于在StackOverflow中包含乳胶的文章(如)中提到的,到目前为止,这还不是一件事。

您可以使用
cumprod
获得向量的累积积,这就是您所追求的

p <- cumprod(z)
p
# [1] 0.6666667 0.5333333 0.4571429 0.4063492 0.3694084 0.3409923 0.3182595
# [8] 0.2995384 0.2837732 0.2702602 0.2585097 0.2481694 0.2389779 0.2307373
# [15] 0.2232941 0.2165276 0.2103411 0.2046562 0.1994087
这里,
sapply
代替循环,并为每个产品传递不同的结束索引

那你就可以了

1 + sum(p)

那个
cumprod
方法是金子,我必须说!!!
p <- cumprod(z)
p
# [1] 0.6666667 0.5333333 0.4571429 0.4063492 0.3694084 0.3409923 0.3182595
# [8] 0.2995384 0.2837732 0.2702602 0.2585097 0.2481694 0.2389779 0.2307373
# [15] 0.2232941 0.2165276 0.2103411 0.2046562 0.1994087
p <- sapply(i, function(x) prod(z[1:x]))
1 + sum(p)