RTVS:无法使用 data.table 编织文档
RTVS: Unable to Knit Document with data.table
我试图在 Visual Studio (RTVS) 2017 (15.7.4) 中获取一个使用 data.table 包的简单 R Markdown 文档,但无济于事。
这是一个最小可重现的 .rmd 文件(打开了一些可选的调试选项):
---
title: "Untitled"
output: html_document
---
```{r knitr-setup, include = FALSE}
library(knitr)
knitr::opts_chunk$set(eval = TRUE)
opts_knit$set(progress = FALSE, verbose = TRUE)
```
```{r test_id, message=FALSE, results="show", echo=TRUE, warning=FALSE}
require(rmarkdown)
require(data.table, quietly = TRUE, warn.conflicts = FALSE)
options(datatable.verbose = TRUE)
DT = data.table(x=1:3, y=4:6) # no
DT # yes
DT[, z := 7:9] # no
print(DT[, z := 10:12]) # yes
if (1 < 2) DT[, a := 1L] # no
DT # yes
```
Some text.
```{r}
sessionInfo()
```
我看过类似的问题,这些问题具有相同的症状:
data.table error when used through knitr, gWidgetsWWW
我已经尝试过命名空间覆盖,类似于我在 "devtools" 包开发中使用它的方式,似乎无关紧要。
https://github.com/rstudio/rmarkdown/issues/278
我认为这可能是我如何引用包(或名称空间等)的问题。但是,完全相同的文件在 "R Studio" 中运行完全正常。所以我不确定是不是这样。
我得到的错误是:
R 评估失败:
rtvs::rmarkdown_publish(blob_id = 29, output_format = "html_document",
encoding = 'cp1252')
Error in ':='(z, 7:9): Check that is.data.table(DT) == TRUE.
Otherwiese, := and ':=' are defined for us in j, once only and in
particular ways. See help(":=").
同样,同一个文档在 R Studio.
中完全没有问题
我确实注意到两个 shell 调用 pandoc 略有不同:
R Studio 电话:
"C:/PROGRA~2/Pandoc/pandoc" +RTS -K512m -RTS dt_error.utf8.md --to
html4 --from
markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash+smart
--output dt_error.html --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\bmore\Documents\R\win-library.5\rmarkdown\rmd\h\default.html"
--no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\bmore\AppData\Local\Temp\Rtmp0cb9Vo\rmarkdown-stra0bc15f917ea.html"
--mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
Visual Studio 通话:
"C:/PROGRA~2/Pandoc/pandoc" +RTS -K512m -RTS rmd_8c885bcf5786.utf8.md
--to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash+smart
--output pandoc8c8870d27b22.html --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\bmore\Documents\R\win-library.5\rmarkdown\rmd\h\default.html"
--no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\bmore\AppData\Local\Temp\Rtmp429dUm\rmarkdown-str8c886f7837b1.html"
--mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
我也向 Visual Studio Developer community 提交了错误报告,但是,我不完全相信如果不更改 IDE.
就无法解决问题
注意:上面的代码在 IDE/Interactive 模式下运行良好,当尝试 'knit' 作为任何输出类型时(html, pdf, doc), 出现错误.
sessionInfo()
R version 3.5.0 (2018-04-23) Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)
Matrix products: default
locale: 1 LC_COLLATE=English_United States.1252
LC_CTYPE=English_United States.1252 LC_MONETARY=English_United
States.1252 LC_NUMERIC=C
LC_TIME=English_United States.1252
attached base packages: 1 stats graphics grDevices utils
datasets methods base
other attached packages: 1 rmarkdown_1.10 knitr_1.20
ggplot2_2.2.1 dplyr_0.7.6 data.table_1.11.4
loaded via a namespace (and not attached): 1 Rcpp_0.12.17
bindr_0.1.1 magrittr_1.5 rtvs_1.0.0.0 tidyselect_0.2.4
munsell_0.5.0 colorspace_1.3-2 R6_2.2.2 rlang_0.2.1
stringr_1.3.1 plyr_1.8.4 tools_3.5.0 grid_3.5.0
gtable_0.2.0 [15] htmltools_0.3.6 yaml_2.1.19
rprojroot_1.3-2 lazyeval_0.2.1 assertthat_0.2.0 digest_0.6.15
tibble_1.4.2 bindrcpp_0.2.2 purrr_0.2.5 evaluate_0.10.1
glue_1.2.0 labeling_0.3 stringi_1.1.7 compiler_3.5.0
这已在 data.table_1.11.8
中确认已修复,之后根据 @Hugh Ugh 上面的评论确认。
但是,如果有人出于某种原因在 RTVS 中被迫使用 data.table 的先前版本,解决方法是添加:
assignInNamespace("cedta.pkgEvalsUserCode", c(data.table:::cedta.pkgEvalsUserCode, "rtvs"), "data.table")
在脚本块中,像这样:
```{r additional-libraries, echo=FALSE}
library(data.table, quietly = TRUE, warn.conflicts = FALSE)
assignInNamespace("cedta.pkgEvalsUserCode", c(data.table:::cedta.pkgEvalsUserCode, "rtvs"), "data.table")
}
```
我试图在 Visual Studio (RTVS) 2017 (15.7.4) 中获取一个使用 data.table 包的简单 R Markdown 文档,但无济于事。
这是一个最小可重现的 .rmd 文件(打开了一些可选的调试选项):
---
title: "Untitled"
output: html_document
---
```{r knitr-setup, include = FALSE}
library(knitr)
knitr::opts_chunk$set(eval = TRUE)
opts_knit$set(progress = FALSE, verbose = TRUE)
```
```{r test_id, message=FALSE, results="show", echo=TRUE, warning=FALSE}
require(rmarkdown)
require(data.table, quietly = TRUE, warn.conflicts = FALSE)
options(datatable.verbose = TRUE)
DT = data.table(x=1:3, y=4:6) # no
DT # yes
DT[, z := 7:9] # no
print(DT[, z := 10:12]) # yes
if (1 < 2) DT[, a := 1L] # no
DT # yes
```
Some text.
```{r}
sessionInfo()
```
我看过类似的问题,这些问题具有相同的症状:
data.table error when used through knitr, gWidgetsWWW
我已经尝试过命名空间覆盖,类似于我在 "devtools" 包开发中使用它的方式,似乎无关紧要。
https://github.com/rstudio/rmarkdown/issues/278
我认为这可能是我如何引用包(或名称空间等)的问题。但是,完全相同的文件在 "R Studio" 中运行完全正常。所以我不确定是不是这样。
我得到的错误是:
R 评估失败:
rtvs::rmarkdown_publish(blob_id = 29, output_format = "html_document", encoding = 'cp1252')
Error in ':='(z, 7:9): Check that is.data.table(DT) == TRUE. Otherwiese, := and ':=' are defined for us in j, once only and in particular ways. See help(":=").
同样,同一个文档在 R Studio.
中完全没有问题我确实注意到两个 shell 调用 pandoc 略有不同:
R Studio 电话:
"C:/PROGRA~2/Pandoc/pandoc" +RTS -K512m -RTS dt_error.utf8.md --to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash+smart --output dt_error.html --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\bmore\Documents\R\win-library.5\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\bmore\AppData\Local\Temp\Rtmp0cb9Vo\rmarkdown-stra0bc15f917ea.html" --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
Visual Studio 通话:
"C:/PROGRA~2/Pandoc/pandoc" +RTS -K512m -RTS rmd_8c885bcf5786.utf8.md --to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash+smart --output pandoc8c8870d27b22.html --email-obfuscation none --self-contained --standalone --section-divs --template "C:\Users\bmore\Documents\R\win-library.5\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "C:\Users\bmore\AppData\Local\Temp\Rtmp429dUm\rmarkdown-str8c886f7837b1.html" --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
我也向 Visual Studio Developer community 提交了错误报告,但是,我不完全相信如果不更改 IDE.
就无法解决问题注意:上面的代码在 IDE/Interactive 模式下运行良好,当尝试 'knit' 作为任何输出类型时(html, pdf, doc), 出现错误.
sessionInfo()
R version 3.5.0 (2018-04-23) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 17134)
Matrix products: default
locale: 1 LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C
LC_TIME=English_United States.1252attached base packages: 1 stats graphics grDevices utils
datasets methods baseother attached packages: 1 rmarkdown_1.10 knitr_1.20
ggplot2_2.2.1 dplyr_0.7.6 data.table_1.11.4loaded via a namespace (and not attached): 1 Rcpp_0.12.17
bindr_0.1.1 magrittr_1.5 rtvs_1.0.0.0 tidyselect_0.2.4 munsell_0.5.0 colorspace_1.3-2 R6_2.2.2 rlang_0.2.1
stringr_1.3.1 plyr_1.8.4 tools_3.5.0 grid_3.5.0
gtable_0.2.0 [15] htmltools_0.3.6 yaml_2.1.19
rprojroot_1.3-2 lazyeval_0.2.1 assertthat_0.2.0 digest_0.6.15
tibble_1.4.2 bindrcpp_0.2.2 purrr_0.2.5 evaluate_0.10.1 glue_1.2.0 labeling_0.3 stringi_1.1.7 compiler_3.5.0
这已在 data.table_1.11.8
中确认已修复,之后根据 @Hugh Ugh 上面的评论确认。
但是,如果有人出于某种原因在 RTVS 中被迫使用 data.table 的先前版本,解决方法是添加:
assignInNamespace("cedta.pkgEvalsUserCode", c(data.table:::cedta.pkgEvalsUserCode, "rtvs"), "data.table")
在脚本块中,像这样:
```{r additional-libraries, echo=FALSE}
library(data.table, quietly = TRUE, warn.conflicts = FALSE)
assignInNamespace("cedta.pkgEvalsUserCode", c(data.table:::cedta.pkgEvalsUserCode, "rtvs"), "data.table")
}
```