使用 distill 包和 Rmarkdown 编写博客,在渲染 .Rmd 文件时,当代码块包含 data.table:=
和.
,但不包含 data.table()
. 当 YAML 标头状态时会发生错误,draft: false
但不会在draft: true
.
.Rmd 文件中的 R 代码块:
# create a data.table
library(data.table)
DT <- data.table(p = 1:5, q = 6:10)
# operate with ":="
DT[, r := p + q][]
# operate with "."
DT[, .(p)]
在draft: true
YAML 标头中,.Rmd 文件可以毫无问题地编织。
使用draft: false
,我仍然可以毫无错误地运行 R 代码块,但编织 .Rmd 文件会产生此错误:
Error: Check that is.data.table(DT) == TRUE. Otherwise, :=, `:=`(...)
and let(...) are defined for use in j, once only and in particular
ways. See help(":=").
Execution halted
如果我用操作注释掉该行:=
,编织文档会在操作上产生类似的错误.
:
Error in .(p) : could not find function "."
Calls: <Anonymous> ... withVisible -> eval -> eval -> [ ->
[.data.table -> [.data.frame
Execution halted
在 Stackoverflow 上,我在 3 年前发现了一个与 rtvs 包(RTVS: Unable to Knit Document with data.table)类似的问题,建议使用assignInNamespace()
. 我将建议复制到我的代码块中,并将“rtvs”更改为“distill”,如下所示:
# workaround
assignInNamespace("cedta.pkgEvalsUserCode",
c(data.table:::cedta.pkgEvalsUserCode, "distill"),
"data.table")
的帮助页面assignInNamespace()
说该功能旨在在一个包中使用,我的博客不是,但它确实解决了我的问题。将此解决方法添加到第一个代码块可消除错误,并且 .Rmd 文件可以正确呈现。
我的问题是:
- 以这种方式使用
assignInNamespace()
会产生任何有问题的副作用吗? - 是否有另一种解决方案,或者这可能是 data.table 或 distill 可能需要补丁的情况?
会话信息
R version 4.1.2 (2021-11-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19041)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] data.table_1.14.3
loaded via a namespace (and not attached):
[1] fansi_1.0.2 digest_0.6.29 R6_2.5.1 jsonlite_1.7.3
[5] magrittr_2.0.2 evaluate_0.14 stringi_1.7.6 rlang_1.0.1
[9] cachem_1.0.6 cli_3.2.0 rstudioapi_0.13 jquerylib_0.1.4
[13] bslib_0.3.1 vctrs_0.3.8 rmarkdown_2.11 distill_1.3
[17] tools_4.1.2 stringr_1.4.0 xfun_0.29 yaml_2.2.2
[21] fastmap_1.1.0 compiler_4.1.2 memoise_2.0.1 htmltools_0.5.2
[25] knitr_1.37 downlit_0.4.0 sass_0.4.0