鉴于:
# 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] ) ), ", ")
答案 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