【发布时间】:2018-03-13 14:55:53
【问题描述】:
这个 R 代码可以工作,但是 for 循环看起来太长太丑了,而且我读过 R 中不建议使用 for 循环。
我想要做的是将不同长度的向量从向量列表 HaarData@W 复制到矩阵 MyMatrix 的行中。
由于向量长度小于矩阵中的列数,我想复制这些值来填充行。
向量的长度为 2z z ∈ ℤ ,矩阵行长度需要为 n 这样 2z ≤ n
library(wavelets)
Data <- seq(1, 16)
n <- as.integer(log2(length(Data)))
#Data <- seq(1, 2 ^ n, 1)
HaarData <- dwt(Data, filter = "haar")
#Square matrix to write data
MyMatrix <- matrix(, nrow = n, ncol = 2 ^ n)
row <- 0 #row counter
for (vector in HaarData@W) {
row <- row + 1
duplication <- (2 ^ n) / length(vector)
newRow <- c(rep(vector, each = duplication))
MyMatrix[row,] <- newRow
}
【问题讨论】:
-
关于使运行代码看起来更漂亮的问题并不是 Stack Overflow 的主题。也许Code Review 是一个更好的地方。
-
试试
do.call(rbind,list(a=1:3, b=1:2, c=1:5)) -
@Jimbou 你的意思是用
MyMatrix <- do.call(rbind, do.call(rep(?, each = n/length(?)),HaarData@W))替换for循环你怎么指定“?” -
直接使用列表
HaarData@W。尝试使用dput()和您的预期输出来包含您的数据。我现在不能安装额外的包,所以用这种方式帮助你会更容易。
标签: r