knitr kable水平线没有出现在倒数第二行pdf

时间:2017-11-23 14:14:06

标签: r pdf knitr r-markdown kable

    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。请帮忙

1 个答案:

答案 0 :(得分: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))

enter image description here

为什么它不起作用

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

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个空元素。在代码片段的末尾,您有一个带有4个元素的空字符向量,因此不会出现水平标尺。