微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

kableExtra 根据单元格值在某些单元格中插入不需要的额外行

如何解决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)  

这会产生下表:

enter image description here

如果我取消注释该行 est1[1,4] <- 38,那么问题就会消失。如果我用 1 或 29 或 41 等替换该值,问题也会消失。但是,如果我用 39 或 40 替换该值,则该单元格会出现不需要的额外行。

最后,如果我使用完全相同的值生成矩阵 est1,则没有问题。但我也加载并计算了 est2est3 中的值,那里没有问题。

我有三个相同构造的表(完全相同的代码,仅更改输入数据文件)。在一个中,我看到了上述行为,仅针对那个单元格。在另一个中,我看到第一组中所有右列单元格的行为(但不是最后两组中),而在第三组中,完全没有问题。

我尝试了各种其他技巧,例如 est1 <- est1*1,但无济于事。奇怪的是,est1 <- est1/2 使间距问题消失了,即使单元格值有更多字符(这应该使它更有可能换行)。并且 est1/2*2 不起作用。

谁能为这种看似非常奇怪的行为提供解释或解决方案?

解决方法

我已经确定了问题(感谢发布的问题 hereherehere)。 问题在于,当表中的两行相同时,\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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?