【问题标题】:knitr kable horizontal line not appearing in second last line pdfknitr kable水平线没有出现在倒数第二行pdf中
【发布时间】:2017-11-23 14:14:05
【问题描述】:
    library(knitr)
    library(kableExtra)
    df <- data.frame("r1" = c(1,2,3,4), "r2"=c(4,5,6,6), "r3"=c(7,8,9,8), "r4"=c(11,12,13,89))
    kable(df, format = "latex", booktabs = T, linesep = c('','','\\hline'))

实际上这段代码应该在倒数第二行得到一条水平线

但是,我不明白。这是 kable 中的错误还是其他任何错误?

我正在尝试在最后一行上方添加一行。我为此使用 Knitr Kable 并将其编织为 pdf。请帮忙

【问题讨论】:

标签: r pdf knitr r-markdown kable


【解决方案1】:

据我所知,linesep 不适用于 kable。相反,您可以使用xtable:

library(xtable)
df <- data.frame("r1" = c(1,2,3,4), "r2"=c(4,5,6,6), "r3"=c(7,8,9,8), "r4"=c(11,12,13,89))
print(xtable(df), hline.after = c(0,3))


为什么它不起作用

这是产生linesep的kable内部代码:

linesep = if (nrow(x) > 1) {
  c(rep(linesep, length.out = nrow(x) - 2), linesep[[1L]], '')
} else rep('', nrow(x))
linesep = ifelse(linesep == "", linesep, paste0('\n', linesep))

在第 2 行中,您可以看到您的 linesep 参数将被重复 nrow(x)-2 次。所以如果你将linesep = c("", "", "\\hline") 传递给kable 并且你只有4 行,那么这个向量将被重复2 次。但由于向量长度大于 2,它只使用前 2 个为空的元素。在 sn-p 的末尾,您有一个包含 4 个元素的空字符向量,因此不会出现水平标尺。

【讨论】:

  • stackoverflow.com/questions/45409750/… 默认情况下,我每隔五行就有一次linesep 的问题。我看到了这篇文章,并且知道 lineep 的逻辑是如何工作的。 github.com/yihui/knitr/blob/master/R/table.R 另外,库(knitr)库(kableExtra)df
  • 所以,你是说要放弃 kable。
  • 添加了一些解释。据我所知,我会改用 xtable 。对于这种情况,它提供了更大的灵活性。
猜你喜欢
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-13
  • 2018-02-18
  • 2018-04-20
  • 2012-10-12
相关资源
最近更新 更多