You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:03:14