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