Rmarkdown文件成功编织成PDF,但从R调用时出错



我写了一个Rmarkdown文件,它加载了一些数据,并生成了一个很酷的kableExtra表,其中包含一些符号、自定义颜色和线条,并将其打印为pdf。

当我打开Rmarkdown文件并进行编织时,它工作得很好,并产生我想要的确切输出。

我现在想使用一个R脚本,它循环遍历一些不同的数据子集,为每个子集生成一个新表(以及单独的输出pdf)。因此,我需要从.R文件中调用我的.Rmd文件。

然而,当我这样做时(使用rmarkdown::render函数),我会得到直接从.Rmd文件中编织时不会发生的错误。

下面是一个功能齐全的.Rmd文件,它与我在实际数据中使用的文件类似。我从第二个R脚本调用它,行为rmarkdown::render("table_creator.Rmd", pdf_document(latex_engine = "xelatex"))

我遇到的第一个错误是Error: Functions that produce HTML output found in document targeting latex output.。我将always_allow_html: yes添加到.Rmd文件的标头中,然后重试。再次直接编织.Rmd文件效果良好。从.R脚本调用它现在会产生错误:! Undefined control sequence. l.94 ...oupfontsize{16}{18}selectfont textcolor [HTML]{ffde71}{$bullet$}...

在这一点上,我认为渲染使用的设置与直接编织.Rmd文件时使用的设置不同。这几乎就像它没有解析.Rmd文件的完整标头,但我不确定。在这一点上,我不知道该如何进行,如果有任何帮助,我将不胜感激。

---
title: ""
output:
pdf_document:
latex_engine: xelatex
header-includes:
- usepackage[T1]{fontenc}
- setmainfont{Helvetica}
- DeclareTextCommand{nobreakspace}{TU}{leavevmodenobreak }
---
```{r, echo=FALSE, message = FALSE, warning = FALSE}
# Packages
suppressMessages(library(kableExtra))
suppressMessages(library(dplyr))
table_info <- data.frame(Symbol = c("$\bullet$", "$\blacksquare$",
"$\blacklozenge$", "x", "+", "$\bullet$"),
Name = letters[1:6],
Results = sample(c("good", "bad"), 6, replace = TRUE),
FontSize = c(16, 10, 11, 16, 16, 18),
Color = c("#ffde71", "#0c0000", "#0c0000", "#0c0000",
"#0c0000", "#cb6f86"))
ktable <- table_info %>%
mutate(Symbol = cell_spec(Symbol, color = Color, 
font_size = FontSize,
escape = FALSE,
format = "latex")) %>%
select(-Color, -FontSize) %>%
kable(escape = FALSE, align = c("l", "l", "l"),
booktabs = TRUE) %>%
row_spec(1:5, hline_after = TRUE) %>%
row_spec(1:6, color = "gray") %>%
column_spec(1, "1.5em")
```
```{r, echo=FALSE}
ktable
```

编辑:附加上下文信息sessionInfo()的输出:

sessionInfo()R版本3.4.3(2017-11-30)平台:x86_64-apple-darwin17.3.0(64位)运行环境:macOS High Sierra 10.13.1

矩阵产品:默认BLAS:/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylibLAPACK:/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

区域设置:[1] en_US.UTF-8/en-US.UTF-8/en_UTF-8/C/en.UTF-8_en_US.UTF-8

附加的基本包:[1] 统计图形grDevices实用程序数据集方法基础

其他附加包裹:[1] bindrcpp_0.2 dplyr_07.4电缆附加_0.9.0标记向下_1.9

通过命名空间加载(未附加):[1] Rpp_0.12.15 rstudioapi_0.7 bindr_0.1 knifer_1.20 xml2_1.2.0
[6]magrittr_1.5 hms_04.2 rvest_0.3.2 munsell_04.3 viridisLite_03.0[11] 颜色空间_1.3-2 R6_2.2.2 rlang_0.1.6 plyr_1.8.4字符串_1.2.0
[16]httr_1.3.1工具_3.4.3 htmltools_0.3.6 yaml2.1.18组件_0.2.0[21]rprojroot_1.3-2摘要_0.6.15 tibble_1.4.2阅读器_1.1.1胶水_1.2.0
[26]评估者_0.10.1字符串_1.1.6编译器_3.4.3支柱_1.1.0缩放-0.5.0
[31]后台_11.1.2 pkgconfig_2.0.1

我将返回到这个问题,因为我也遇到了类似的问题。问题是,我可以手动编织PDF,但一旦我通过R中的脚本完成,我就会收到Error in xml_children(x)[[search]] : subscript out of bounds错误。

我能够确定这源于kable生产中的row_spec(),但在删除row_spec()调用后,我遇到了error: Functions that produce HTML output found in document targeting latex output.错误。

奇怪的是,这只发生在我项目的一个特定分支上,而不是主要分支。但是,转向主要分支并没有纠正这个问题。重新启动R完成。进一步加剧问题的是,如果我在主分支中启动R,然后切换到开发分支,但没有自动重新获取所有内容,则不会出现错误。这表明错误出现在开发分支的新脚本中。

因此,我在通过主分支和开发分支加载R时进行了sessionInfo()调用,发现在我的一个较新脚本中,我有一个额外的library(kableExtra),它是在所有其他包都被引入后加载的(已经包括一个kableExtra调用)。出于某种奇怪的原因,这个额外的kableExtra调用还引入了virisdisLitewebshot,这两个包最初没有出现在最初的kableExtra调用中。

一旦删除了额外的library(kableExtra),问题就解决了,不再调用两个额外的包virisdisLitewebshotrender()到pdf也不再有任何问题。

相关内容

最新更新