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

4

1 回答 1

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))

在此处输入图像描述


为什么它不起作用

这是 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 个元素的空字符向量,因此不会出现水平标尺。

于 2017-11-23T15:36:44.317 回答