2

使用 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: trueYAML 标头中,.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 文件可以正确呈现。

我的问题是:

  1. 以这种方式使用assignInNamespace()会产生任何有问题的副作用吗?
  2. 是否有另一种解决方案,或者这可能是 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 
4

0 回答 0