问题描述
我是新来的,但是我在R上花了几个小时。我正在使用R软件包Drake和knitr的组合。 但是我有Rmarkdown文件错误。我具有与Drake示例(https://github.com/ropensci/drake)类似的结构,在该示例中,我加载了数据,绘制了图表,然后绘制了统计分析的图表和汇总表(使用R软件包kableextra)。
当我选择一个.tex文件并在Rmarkdown文件中包含以下几行时,一切都将正常工作
output: latex_document
tables: true
graphics: yes
按德雷克计划
report = rmarkdown::render(
knitr_in("Reports/report.Rmd"),output_file = "report.tex")
但是当我想要一个已编译的pdf文件作为输出时,其中的rmarkdown标头包含以下行:
output:
pdf_document:
latex_engine: xelatex
tables: true
graphics: yes
和德雷克
report = rmarkdown::render(
knitr_in("Reports/report.Rmd"),output_format = "pdf_document",output_file = "report.pdf")
我收到一条错误消息:
`! Undefined control sequence.
<template> ...\hskip 1sp\d@llarbegin \columncolor
[HTML]{BBBBBB}\ignorespaces
l.178 \em{Predictors} & \em
{Coefficients} & \em{SE} & \em{P-value} & \em{Coe...
x fail report
Erreur : target report Failed.
diagnose(report)$error$message:
LaTeX Failed to compile report.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See report.log for more info.`
因此,我已经在网上搜索了此错误,然后访问了益辉网站。我从计算机上卸载了所有TexLive,已卸载并重新安装rmarkdown和tinytex。但是它不起作用,仍然有此错误。
错误发生在kableextra包中的表之前。因此,我发现其他人说在rmarkdown的标头上添加options(kableExtra.latex.load_packages = FALSE)
可能会有所帮助或添加booktabs̀
和makecell
。但这仍然行不通:-/我错过了任何想法或潜在链接吗?
更新可复制示例
---
title: "Knitr and analysis"
author: "VJ"
output:
pdf_document:
latex_engine: xelatex
tables: true
graphics: yes
---
# Example
```{r content,echo = FALSE,include=FALSE}
#tinytex::install_tinytex()
# output:
# pdf_document:
# latex_engine: xelatex
#pdf_document or latex_document
#latex_engine: xelatex
library(glmmTMB)
library(tinytex)
library(drake)
library(tidyverse)
library(pander)
#options(kableExtra.latex.load_packages = FALSE)
library(kableExtra)
options(kableExtra.latex.load_packages = FALSE)
data("iris")
```
```{r analysis qty,echo = FALSE}
#outputs table from four model
fitFc = glmmTMB(Sepal.Width ~ Petal.Length +
Species,iris,family = gaussian)
fitFc1 <- as.data.frame(coef(summary(fitFc))$cond)
varname1 <- c("Intercept","PL","Plant 1 - Versicolor","Plant 2 - Virginica")
fitFc1 <- cbind(varname1,fitFc1)
rownames(fitFc1) <- NULL
m1 <- fitFc1 %>% select(1,2,3,5) %>%
rename("Predictors" = 1,"Coefficients" = 2,"SE" = 3,"pvalue" = 4) %>%
mutate(pvalue = format.pval(pvalue,eps = .001,digits = 1)) %>%
mutate_at(vars(-pvalue,-Predictors),~round(.,2))
#bold significant pvalue and then create output summary from glmm
m1$pvalue<- cell_spec(m1$pvalue,bold = ifelse(m1$pvalue< 0.05,TRUE,FALSE))
kable(m1,format = "latex",booktabs = T,caption = "Summary of linear model (LMMs).",col.names = c("Predictors","Coefficients","SE","P-value"),escape = F) %>%
kable_styling(latex_options = c("hold_position")) %>%
column_spec(2:4,background = "#BBBBBB") %>%
kable_styling() %>%
add_header_above(c(" " = 1,"LMM1" = 3),bold = T) %>%
row_spec(0,bold = FALSE,italic = T)
```
这是我的sessionInfo()的详细信息
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C LC_TIME=fr_FR.UTF-8
[4] LC_COLLATE=fr_FR.UTF-8 LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
[7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics Grdevices utils datasets methods base
other attached packages:
[1] kableExtra_1.1.0 tinytex_0.25 pander_0.6.3 sjstats_0.18.0 sjplot_2.8.4
[6] glmmTMB_1.0.2.1 lmertest_3.1-2 lme4_1.1-23 Matrix_1.2-18 ggeffects_0.15.1
[11] effects_4.2-0 carData_3.0-4 cowplot_1.0.0 forcats_0.5.0 stringr_1.4.0
[16] dplyr_1.0.0 readr_1.3.1 tidyr_1.1.0 tibble_3.0.1 ggplot2_3.3.2
[21] tidyverse_1.3.0 drake_7.12.4 purrr_0.3.4
loaded via a namespace (and not attached):
[1] minqa_1.2.4 colorspace_1.4-1 ellipsis_0.3.1 sjlabelled_1.1.6
[5] estimability_1.3 parameters_0.8.2 fs_1.4.2 rstudioapi_0.11
[9] farver_2.0.3 fansi_0.4.1 mvtnorm_1.1-1 lubridate_1.7.9
[13] xml2_1.3.2 splines_4.0.2 knitr_1.29 sjmisc_2.8.5
[17] jsonlite_1.7.0 nloptr_1.2.2.2 broom_0.5.6 dbplyr_1.4.4
[21] effectsize_0.3.2 compiler_4.0.2 httr_1.4.1 emmeans_1.4.8
[25] backports_1.1.8 assertthat_0.2.1 survey_4.0 cli_2.0.2
[29] htmltools_0.5.0 prettyunits_1.1.1 tools_4.0.2 igraph_1.2.5
[33] coda_0.19-3 gtable_0.3.0 glue_1.4.1 Rcpp_1.0.5
[37] cellranger_1.1.0 vctrs_0.3.1 nlme_3.1-147 insight_0.9.0
[41] xfun_0.16 rvest_0.3.5 lifecycle_0.2.0 statmod_1.4.34
[45] MASS_7.3-51.6 scales_1.1.1 hms_0.5.3 parallel_4.0.2
[49] TMB_1.7.18 RColorBrewer_1.1-2 yaml_2.2.1 stringi_1.4.6
[53] bayestestR_0.7.2 filelock_1.0.2 boot_1.3-25 storr_1.2.1
[57] rlang_0.4.7 pkgconfig_2.0.3 evaluate_0.14 lattice_0.20-41
[61] labeling_0.3 tidyselect_1.1.0 magrittr_1.5 R6_2.4.1
[65] generics_0.0.2 base64url_1.4 txtq_0.2.3 DBI_1.1.0
[69] mgcv_1.8-31 pillar_1.4.4 haven_2.3.1 withr_2.2.0
[73] survival_3.2-3 nnet_7.3-14 performance_0.4.8 modelr_0.1.8
[77] Crayon_1.3.4 utf8_1.1.4 rmarkdown_2.3.3 progress_1.2.2
[81] grid_4.0.2 readxl_1.3.1 blob_1.2.1 reprex_0.3.0
[85] digest_0.6.25 webshot_0.5.2 xtable_1.8-4 numDeriv_2016.8-1.1
[89] munsell_0.5.0 viridisLite_0.3.0 mitools_2.4```
解决方法
当我遇到这样的问题时,我要做的第一件事是在drake
外的R控制台中重现错误。通常,这些类型的错误不是由于drake
本身,而是由于drake
需要您编写额外的自定义代码这一事实。在这种情况下,报表将使用RStudio IDE中的“编织”按钮运行,而不使用rmarkdown::render("report.Rmd")
来运行。这使我相信问题出在报告的某处,即我们的TeX配置tinytex
,kable
,kableExtra
或pander
。我建议将此问题重新发布为R Markdown / LaTeX问题而不是drake
问题,以便您找到合适的人来帮助您。
详细说明我尝试过的事情:
- 当我在RStudio IDE中按下“编织”按钮时,报表将正常运行并生成外观合理的
report.pdf
文件。 - 当我在
rmarkdown::render("report.Rmd")
外部的R控制台中使用drake
运行报告时,我得到"! Undefined control sequence. <template> ...\hskip 1sp\d@llarbegin \columncolor [HTML]{BBBBBB}\ignorespaces"
。 - 当我注释掉
column_spec(2:4,background = "#BBBBBB")
并再次运行rmarkdown::render("report.Rmd")
时,出现一个新错误:"! Extra alignment tab has been changed to \cr. <recently read> \endtemplate
。
另一件事:R社区正试图淘汰iris
数据集,因为它与优生学研究https://armchairecology.blog/iris-dataset/,https://www.garrickadenbuie.com/blog/lets-move-on-from-iris/有联系。请尽可能避免它。 penguins
数据集:https://github.com/allisonhorst/palmerpenguins是一个很好的替代品。这是您使用penguins
而非iris
的报表版本。
---
title: "Knitr and analysis"
author: "VJ"
output:
pdf_document:
latex_engine: xelatex
tables: true
graphics: yes
---
# Example
```{r content,echo = FALSE,include=FALSE}
library(glmmTMB)
library(tinytex)
library(drake)
library(tidyverse)
library(pander)
library(kableExtra)
options(kableExtra.latex.load_packages = FALSE)
library(palmerpenguins)
```
```{r analysis qty,echo = FALSE}
fitFc <- glmmTMB(bill_length_mm ~ bill_depth_mm + species,penguins,family = gaussian)
fitFc1 <- as.data.frame(coef(summary(fitFc))$cond)
fitFc1$variable <- rownames(fitFc1)
rownames(fitFc1) <- NULL
m1 <- fitFc1 %>%
select(variable,everything()) %>%
select(1,2,3,5) %>%
rename("Predictors" = 1,"Coefficients" = 2,"SE" = 3,"pvalue" = 4) %>%
mutate(pvalue = format.pval(pvalue,eps = .001,digits = 1)) %>%
mutate_at(vars(-pvalue,-Predictors),~round(.,2))
m1$pvalue <- cell_spec(m1$pvalue,bold = ifelse(m1$pvalue< 0.05,TRUE,FALSE))
kable(
m1,format = "latex",booktabs = T,caption = "Summary of linear model (LMMs).",col.names = c("Predictors","Coefficients","SE","P-value"),escape = F) %>%
kable_styling(latex_options = c("hold_position")) %>%
column_spec(2:4,background = "#BBBBBB") %>%
kable_styling() %>%
add_header_above(c(" " = 1,"LMM1" = 3),bold = T) %>%
row_spec(0,bold = FALSE,italic = T)
```
,
所以,我已经把请求放到GitHub上了,最后感谢朱Zhu,解决了它!
我所做的:
- 删除
options(kableExtra.latex.load_packages = FALSE)
- 使用
devtools::install_github("haozhu233/kableExtra")
更新kableExtra软件包v1.2 - 重新启动我的R会话
- 运行
report = rmarkdown::render(
#envir = new.env(),knitr_in("Reports/report.Rmd"),output_format = "pdf_document",output_file = "report.pdf")
请注意,如果您更新软件包,则无论有无envir = new.env()
,它都可以工作
请参见此处获取原始答案:https://github.com/haozhu233/kableExtra/issues/501