不使用for循环的向量迭代

不使用for循环的向量迭代,r,R,鉴于: 这里使用for循环是可行的,但是有没有一种方法可以使用子集或其他R函数来实现呢?我宁愿使用内置数据类型来处理数字,而不是字符串连接 # Desired outcome c( y[2], sum( x[1:2] ), y[2] / sum( x[1:2] ) ) c( y[3], sum( x[1:3] ), y[3] / sum( x[1:3] ) ) c( y[4], sum( x[1:4] ), y[4] / sum( x[1:4] ) ) c( y[5], sum( x[1:5]

鉴于:

这里使用for循环是可行的,但是有没有一种方法可以使用子集或其他R函数来实现呢?我宁愿使用内置数据类型来处理数字,而不是字符串连接

# Desired outcome 
c( y[2], sum( x[1:2] ), y[2] / sum( x[1:2] ) )
c( y[3], sum( x[1:3] ), y[3] / sum( x[1:3] ) )
c( y[4], sum( x[1:4] ), y[4] / sum( x[1:4] ) )
c( y[5], sum( x[1:5] ), y[5] / sum( x[1:5] ) )
c( y[6], sum( x[1:6] ), y[6] / sum( x[1:6] ) )
c( y[7], sum( x[1:7] ), y[7] / sum( x[1:7] ) )
你可以这么做

for (i in 2:7) cat( c( y[i], sum( x[1:i] ), y[i] / sum( x[1:i] ) ), ", ")
y[-1]
:除第一个元素外,y的所有元素
cumsum(x)
:x的累积和
cumsum(x)[-1]
:除第一个元素外的所有元素
cbind
:将它们作为data.frame的列连接起来

for (i in 2:7) cat( c( y[i], sum( x[1:i] ), y[i] / sum( x[1:i] ) ), ", ")
y[-1]
:除第一个元素外,y的所有元素
cumsum(x)
:x的累积和
cumsum(x)[-1]
:除第一个元素外的所有元素
cbind
:将它们作为data.frame的列连接起来

cbind(y[-1], cumsum(x)[-1], y[-1]/cumsum(x)[-1])
##              [,1]       [,2]         [,3]
## [1,] 0.0003332223   62.10692 5.365301e-06
## [2,] 0.0006662225  181.86583 3.663264e-06
## [3,] 0.0009990010  351.15304 2.844916e-06
## [4,] 0.0015044000  567.87212 2.649188e-06
## [5,] 0.0019960080  807.65199 2.471371e-06
## [6,] 0.0029910269 1071.93396 2.790309e-06