R语言中平方矩阵按间隔插竖线后行尾出现NULL的问题排查
解决R矩阵打印时末尾出现NULL的问题
嗨,这个问题其实很容易搞定!咱们先搞清楚为什么会出现NULL:
问题根源
cat()函数本身的返回值是NULL,你在代码里把cat()的结果赋值给了current.row,然后又调用print(current.row),这就相当于在cat输出完每行内容后,额外打印了NULL。而且你的cat语句其实已经在输出内容了,后面的print完全是多余的哦。
修正后的代码
我们只需要去掉赋值和print语句,再给每行加上换行,就能得到干净的输出了:
# 创建测试矩阵 set.seed(1) temp = matrix(sample(x=(11:99), size= 81), 9, 9) # 修复后的打印函数 custom_print = function(x){ s = as.integer(sqrt(nrow(x))) for(r in 1:nrow(x)){ # 遍历每个分块,输出|和对应元素 for(c in 1:s){ cat("|", x[r, (s*(c-1)+1):(c*s)], " ") } # 每行末尾补一个|并换行,让格式更规整 cat("|\n") } } # 调用测试 custom_print(temp)
运行这个代码,输出就不会有NULL了,而且每行的格式会更对称:
| 34 15 37 | 99 53 85 | 13 50 62 | | 43 27 92 | 64 16 12 | 14 58 32 | | 60 24 75 | 31 71 97 | 66 17 18 | ...
更简洁的写法(可选)
如果想让代码更简洁,可以用apply函数来处理每行,同时让分隔格式更整齐:
custom_print_v2 = function(x){ s = sqrt(nrow(x)) |> as.integer() # 逐行处理矩阵 apply(x, 1, function(row){ # 把每行分成s个等长的块 chunks = split(row, ceiling(seq_along(row)/s)) # 把每个块转成空格分隔的字符串 chunk_strs = sapply(chunks, paste, collapse = " ") # 用|连接所有块并输出 cat(paste0("| ", paste(chunk_strs, collapse = " | "), " |\n")) }) # 隐形返回NULL,避免apply输出额外结果 invisible(NULL) } custom_print_v2(temp)
这个版本的输出会更美观,比如:
| 34 15 37 | 99 53 85 | 13 50 62 | | 43 27 92 | 64 16 12 | 14 58 32 | | 60 24 75 | 31 71 97 | 66 17 18 | ...
内容的提问来源于stack exchange,提问作者NM_
相关产品推荐
相关产品推荐

