如何解决kableExtra 根据单元格值在某些单元格中插入不需要的额外行
我正在使用 kableExtra 生成 Rmarkdown 表(在 Rstudio 1.2.1335、Windows 10 中)。其中一个单元格的值被推到另一行,这会弄乱行距(见下图)。奇怪的是,如果我用另一个值手动替换矩阵中的那个单元格值,它有时会修复它,具体取决于替换值。我的代码如下(我尝试过但未能制作可重现的示例 - 问题似乎只出现在我的实际数据中)。
est1 <- as.matrix(cbind(round(apply(sexClass2,2,mean),0),round(apply(sexClass2,mlv,method="lientz",bw=0.5),round(t(apply(sexClass2,hdi)),0)))
#est1[1,4] <- 38
load("FR_Coll_20200815_20201115_weekly_theta_df_Constrained.RData")
est2 <- cbind(round(apply(sexClass2,0))
load("FR_Coll_20200815_20201115_weekly_theta.RData")
est3 <- cbind(round(apply(sexClass2,0))
est <- rbind(est1,est2,est3)
cap <- "Abundance estimates for elk from the FR camera grid. Estimates reflect the subtraction of any animals kNown to have died during the study period."
colnames(est) <- c("Mean","Mode","LCrL","UCrL")
rownames(est) <- rep(c("Cows","Bulls","Calves","Cows + Calves","Total"),times=3)
estFR <- est %>%
kable(booktabs = TRUE,caption=cap,linesep = "",align=rep('r',4),escape=FALSE) %>%
kable_styling(latex_options = c("hold_position"),full_width = FALSE) %>%
column_spec(1,width = "6cm")%>%
column_spec(2:5,width = "2cm") %>%
pack_rows("Group-specific detection parameters",1,5) %>%
pack_rows("Group-specific detection parameters,and IDs constrained",6,10)%>%
pack_rows("Constant detection parameters",11,15)
这会产生下表:
如果我取消注释该行 est1[1,4] <- 38
,那么问题就会消失。如果我用 1 或 29 或 41 等替换该值,问题也会消失。但是,如果我用 39 或 40 替换该值,则该单元格会出现不需要的额外行。
最后,如果我使用完全相同的值生成矩阵 est1
,则没有问题。但我也加载并计算了 est2
和 est3
中的值,那里没有问题。
我有三个相同构造的表(完全相同的代码,仅更改输入数据文件)。在一个中,我看到了上述行为,仅针对那个单元格。在另一个中,我看到第一组中所有右列单元格的行为(但不是最后两组中),而在第三组中,完全没有问题。
我尝试了各种其他技巧,例如 est1 <- est1*1
,但无济于事。奇怪的是,est1 <- est1/2
使间距问题消失了,即使单元格值有更多字符(这应该使它更有可能换行)。并且 est1/2*2
不起作用。
谁能为这种看似非常奇怪的行为提供解释或解决方案?
解决方法
我已经确定了问题(感谢发布的问题 here、here 和 here)。
问题在于,当表中的两行相同时,\vphantom{1}
会插入到第一个相同行的 LaTex 代码中,以区分两行相同。我在检查 Latex 文件时注意到了这一点 - 表格的第一行是
\hspace{1em}Cows & 29 & 28 & 19 & \vphantom{1} 39\\
一种变通方法(但可能不是一个非常令人满意和通用的解决方案)是将插入的代码移到行尾,例如 est[1,4] <- "39\\vphantom{1}"
,它产生了
\hspace{1em}Cows & 29 & 28 & 19 & 39\vphantom{1}\\
在 Latex 代码中,然后正确格式化 pdf 输出。
我不确定为什么相同的行有问题(为什么有必要使它们不相同),也不知道是否有更好的通用解决方案,不需要更改表规范中的值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。