R 中的二叉树 table
Binomial tree table in R
我在 R 中生成了以下二叉树 table。
矩阵 1:
我想把这个矩阵转换成另一种类型。
矩阵 2:
如何使用 for 循环执行此操作?
这是一个完成它的函数,但没有使用 for
循环:
fBT <- function(m) {
n <- nrow(m)
v <- rep(c(m[0], NA), n*(2*n - 1))
i <- c(n, rep(2L, n*(n + 1)/2 - 1))
if (n > 2L) {
ii <- 2:(n - 1)
i[ii*(ii - 1)/2 + 1] <- seq(2*n - 2, 4, -2)
}
v[cumsum(i)] <- m[upper.tri(m, diag = TRUE)]
return(matrix(v, ncol = n))
}
n <- 4L
m <- matrix(nrow = n, ncol = n)
m[upper.tri(m, diag = TRUE)] <- 1:(n*(n + 1)/2)
m
#> [,1] [,2] [,3] [,4]
#> [1,] 1 2 4 7
#> [2,] NA 3 5 8
#> [3,] NA NA 6 9
#> [4,] NA NA NA 10
fBT(m)
#> [,1] [,2] [,3] [,4]
#> [1,] NA NA NA 7
#> [2,] NA NA 4 NA
#> [3,] NA 2 NA 8
#> [4,] 1 NA 5 NA
#> [5,] NA 3 NA 9
#> [6,] NA NA 6 NA
#> [7,] NA NA NA 10
我在 R 中生成了以下二叉树 table。
矩阵 1:
我想把这个矩阵转换成另一种类型。
矩阵 2:
如何使用 for 循环执行此操作?
这是一个完成它的函数,但没有使用 for
循环:
fBT <- function(m) {
n <- nrow(m)
v <- rep(c(m[0], NA), n*(2*n - 1))
i <- c(n, rep(2L, n*(n + 1)/2 - 1))
if (n > 2L) {
ii <- 2:(n - 1)
i[ii*(ii - 1)/2 + 1] <- seq(2*n - 2, 4, -2)
}
v[cumsum(i)] <- m[upper.tri(m, diag = TRUE)]
return(matrix(v, ncol = n))
}
n <- 4L
m <- matrix(nrow = n, ncol = n)
m[upper.tri(m, diag = TRUE)] <- 1:(n*(n + 1)/2)
m
#> [,1] [,2] [,3] [,4]
#> [1,] 1 2 4 7
#> [2,] NA 3 5 8
#> [3,] NA NA 6 9
#> [4,] NA NA NA 10
fBT(m)
#> [,1] [,2] [,3] [,4]
#> [1,] NA NA NA 7
#> [2,] NA NA 4 NA
#> [3,] NA 2 NA 8
#> [4,] 1 NA 5 NA
#> [5,] NA 3 NA 9
#> [6,] NA NA 6 NA
#> [7,] NA NA NA 10