0

我正在使用 kableExtra 生成一个 Rmarkdown 表(在 Rstudio 1.2.1335,Windows 10 中)。其中一个单元格最终将其值推到另一行,这弄乱了行间距(见下图)。奇怪的是,如果我用另一个值手动替换矩阵中的单元格值,它有时会修复它,具体取决于替换值。我的代码在下面(我已经尝试过但未能制作一个可重复的示例 - 问题似乎只出现在我的实际数据中)。

est1 <- as.matrix(cbind(round(apply(sexClass2,2,mean),0),
             round(apply(sexClass2,2,mlv,method="lientz",bw=0.5),0),
             round(t(apply(sexClass2,2,hdi)),0)))
#est1[1,4] <- 38
load("FR_Coll_20200815_20201115_weekly_theta_df_Constrained.RData")
est2 <- cbind(round(apply(sexClass2,2,mean),0),
             round(apply(sexClass2,2,mlv,method="lientz",bw=0.5),0),
             round(t(apply(sexClass2,2,hdi)),0))
load("FR_Coll_20200815_20201115_weekly_theta.RData")
est3 <- cbind(round(apply(sexClass2,2,mean),0),
             round(apply(sexClass2,2,mlv,method="lientz",bw=0.5),0),
             round(t(apply(sexClass2,2,hdi)),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最后,如果我使用完全相同的值生成该矩阵,那么就没有问题。但是我也加载并计算了 and 中的值est2est3那里没有问题。

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

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

任何人都可以为这种看似非常奇怪的行为提供解释或解决方案吗?

4

1 回答 1

0

我已经确定了问题(感谢此处此处此处发布的问题)。问题是当表中的两行相同时,将 a\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 输出。

我不确定为什么相同的行有问题(为什么必须使它们不相同),也不知道是否有更好的通用解决方案不需要更改表规范中的值。

于 2021-03-17T17:34:46.393 回答