【问题标题】:Print a frequency table of a factor with kable in rmarkdown在 rmarkdown 中打印带有 kable 的因子的频率表
【发布时间】:2015-06-23 16:04:47
【问题描述】:

我在 R 中有一个因子,它由水平 a、b 和 c 组成。数据由 2 个 a、1 个 b 和没有 c 组成。我想得到这样的输出(根据级别的元素频率):

fac <- factor(c("a", "b", "a"), levels=c("a", "b", "c"))
tbl <- table(fac)
tbl

## fac
## a b c 
## 2 1 0

这应该用 knitr/kable 打印在一个漂亮的 html 表格中:

library(knitr)
kable(tbl)

但是错误来了:

"Error in dn[[2L]] : subscript out of bounds".

我认为表格的暗名存在问题:

attributes(tbl)
## $dim
## [1] 3
## 
## $dimnames
## $dimnames$fac
## [1] "a" "b" "c"
## 
## 
## $class
## [1] "table"

是否有任何选项可以“修复”kable 的暗名?我只想打印这个“简单”的表格——也许我遇到了一些简单的事情?

此处描述了“表”与因子的用法:http://www.stat.berkeley.edu/~s133/factors.html

最近几天我读了很多关于“pander”包的信息。如果我用 pander 打印表格,它可以工作。为什么?我应该切换到 pander 吗?

pander(tbl)

【问题讨论】:

  • 我是pander 的维护者,所以我的观点有些偏颇:) 但是panderconvert your R tables to markdown 提供了更多选择,更不用说support for a bunch of S3 classes
  • 我稍后会尝试,它看起来很棒。但我宁愿选择使用不同的包。我认为 pander 可以做 kable 可以做的所有事情,但反过来不行?
  • 我不确定尝试用一个包解决问题有什么好处,这个问题已经被另一个包解决了,但我相信你有你的动机。关于panderkable:这些函数的用途有点不同。 kable 用于渲染基本的markdown/LaTeX/HTML 表格,而xtable 可以渲染复杂的LaTeX 表格,而pander 提供了对markdown 表格的~完全支持。
  • 感谢您在这里的详尽解释。我不想将讨论引向错误的方向,但这是否意味着在创建乳胶/pdf 输出时不能使用 pander?我的想法是让文档尽可能灵活——我是否想创建一个 pdf 或 html 一开始并不重要。稍后,当我创建论文或网站时,我需要精细控制。但尽管如此,我应该更深入地研究这些包!
  • 好吧,如果您需要灵活性,我会坚持使用pander:它提供对大多数降价支持的访问(kable 可能会错过),可以转换为 HTML、PDF、 docx 或类似的。

标签: r knitr r-markdown pander


【解决方案1】:

你可以试试

> kable(t(as.matrix(tbl)))
#
#|  a|  b|  c|
#|--:|--:|--:|
#|  2|  1|  0|

【讨论】:

  • table 格式并不总是很实用。因此,如果要进一步处理输出,将表格转换为矩阵或数据框通常很方便。
  • 谢谢你,这成功了!我尝试了一个 data.frame,但它不起作用,所以这可能是最好的方法。
猜你喜欢
  • 2020-06-06
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多