我不确定,但我认为这可以满足您的要求,首先使用 afor-loop
然后使用apply
. 两种方法都给出了相同的答案:
set.seed(1234)
nrow <- 5
ncol <- 7
M <- matrix(floor(runif(nrow*ncol, 0, 10)), ncol = ncol, byrow=TRUE)
M <- as.data.frame(M)
M
# V1 V2 V3 V4 V5 V6 V7
# 1 1 6 6 6 8 6 0
# 2 2 6 5 6 5 2 9
# 3 2 8 2 2 1 2 3
# 4 3 1 0 2 8 5 9
# 5 8 0 4 2 3 5 1
v <- seq(1, 5, by = (5-1) / (ncol-1))
v
# [1] 1.000000 1.666667 2.333333 3.000000 3.666667 4.333333 5.000000
for (t in 2:nrow(M))
{
M[t,] <- M[t-1,] * v
}
M
M.bottom <- as.data.frame(t(sapply(seq(2,nrow(M)), function(i) { apply(M[i-1,], 1, function(x) x * v) })))
new.M <- rbind(M[1,], M.bottom)
new.M
# V1 V2 V3 V4 V5 V6 V7
# 1 1 6.00000 6.00000 6 8.00000 6.0000 0
# 2 1 10.00000 14.00000 18 29.33333 26.0000 0
# 3 1 16.66667 32.66667 54 107.55556 112.6667 0
# 4 1 27.77778 76.22222 162 394.37037 488.2222 0
# 5 1 46.29630 177.85185 486 1446.02469 2115.6296 0