迭代通过向量而不使用for循环

时间:2014-04-15 01:46:50

标签: r

鉴于:

# Numeric Vector x and Vector y

x <- c( 0.00000,  62.10692, 119.75891, 169.28721, 216.71908, 239.77987, 264.28197)
y <- c( 0.0000000000, 0.0003332223, 0.0006662225, 0.0009990010, 0.0015044000, 0.0019960080, 0.0029910269)

如何在不使用for循环的情况下使用迭代创建新的向量?这是手动的样子:

# 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循环有效,但有没有办法使用子集或其他R函数来做到这一点?我宁愿使用内置数据类型来处理数字而不是字符串连接。

for (i in 2:7) cat( c( y[i], sum( x[1:i] ), y[i] / sum( x[1:i] ) ), ", ")

1 个答案:

答案 0 :(得分:4)

你可以做到

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

y[-1]:y的所有元素,除了第一个 cumsum(x):累计和x cumsum(x)[-1]:除第一个以外的所有元素 cbind:将它们作为data.frame

列加入