【问题标题】:How to prevent knitr from printing ## and matrix indices/row numbers?如何防止knitr打印##和矩阵索引/行号?
【发布时间】:2023-03-12 15:40:01
【问题描述】:

假设我有一个矩阵,其中有一个 id 列,每行不增加 1。

m <- matrix(c(1, "a", "c", 
              5, "g", "c", 
              4, "b", "c", 
              9, "g", "a"),
     ncol=3, byrow=TRUE)
colnames(m) <- c("id", "class", "type")

我尝试用rownames(m) &lt;- NULLrownames(m) &lt;- c() 重命名行,但我总是得到一个在最左边有行号的输出:

     id  class type
[1,] "1" "a"   "c" 
[2,] "5" "g"   "c" 
[3,] "4" "b"   "c" 
[4,] "9" "g"   "a" 

此外,如果我在 knitr 中打印为 PDF,我会得到 ## 运行在一边:

##      id  class type
## [1,] "1" "a"   "c" 
## [2,] "5" "g"   "c" 
## [3,] "4" "b"   "c" 
## [4,] "9" "g"   "a" 

我想打印一个仅包含我输入到矩阵中的数据的 pdf:

id  class type
"1" "a"   "c" 
"5" "g"   "c" 
"4" "b"   "c" 
"9" "g"   "a" 

【问题讨论】:

  • 您是否考虑过转换为数据框?
  • “##”由knitr 中的comment 选项控制,适用于所有打印输出。见yihui.name/knitr/options/#code-decoration。您可以使用 kable 之类的东西来解决这个问题,它将输出转换为格式正确的表格。

标签: r pdf printing knitr indices


【解决方案1】:

您可以使用knitr 包中的kable

m <- matrix(
  c(1, "a", "c", 5, "g", "c", 4, "b", "c", 9, "g", "a"),
  ncol=3,
  byrow=TRUE
)

colnames(m) <- c("id", "class", "type")

knitr::kable(m)

# |id |class |type |
# |:--|:-----|:----|
# |1  |a     |c    |
# |5  |g     |c    |
# |4  |b     |c    |
# |9  |g     |a    |

您还可以阅读优秀的kableExtrahere,它会为您提供一些很棒的格式选项。

注意我最初的回答包括转换为数据框,这仍然是我创建表时的常用工作流程。然而正如所指出的,kable 会很乐意接受一个矩阵作为输入。

【讨论】:

  • 谢谢,这对我来说似乎是最好的选择。但是,我使用一些 forloops 来输出我的数据帧,并且除非使用 print 显式调用,否则不会打印很多对象。看起来 knitr:kable() 就是其中之一。如果我用 print 调用它,它的所有格式都会丢失。你知道解决这个问题的方法吗?
  • @NicholasHassan,这确实是一个单独的问题,但是,您可以考虑使用 results='asis' 是您的块,或者还有 pander 包特别擅长于此。否则,您可以正确使用print,如here 所述
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2016-12-29
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多