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