R语言中多组迭代生成矩阵合并为单个矩阵的实现问题
错误原因排查
- 核心错误:拼接逻辑错误。你的第二个循环每次都对
temp执行覆盖式赋值,没有累积之前拼接的结果,循环执行完只保留了最后一次迭代(i=0)的矩阵,所以最终只有k=0的行。 - 次要问题:使用
assign批量生成临时变量完全没有必要,不仅代码冗余,还容易引发变量作用域相关的意外错误。
正确实现方案
方案1:循环写法(易理解)
library(partitions) # 你原有生成矩阵的函数 posloc<- function(k, n){ df = t(as.matrix(blockparts(rep(k,n),k, include.fewer = FALSE))) indx <- !duplicated(t(apply(df, 1, sort))) df[indx, ] } # 设定参数,这里对应你示例的最大值k=4、列数n=5 max_k <- 4 n <- 5 # 初始化结果矩阵 result <- NULL # 从最大值逐次递减到0,循环拼接 for(i in max_k:0){ result <- rbind(result, posloc(i, n)) } # 输出结果 print(result)
方案2:向量化写法(更简洁高效)
library(partitions) posloc<- function(k, n){ df = t(as.matrix(blockparts(rep(k,n),k, include.fewer = FALSE))) indx <- !duplicated(t(apply(df, 1, sort))) df[indx, ] } max_k <-4 n <-5 # 一次性生成所有k对应的矩阵,再批量按行拼接 result <- do.call(rbind, lapply(max_k:0, function(k_val) posloc(k_val, n))) print(result)
两种方案运行后输出的结果都和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者SwamJay
相关产品推荐
相关产品推荐

