RTVS:无法使用data.table

时间:2018-07-01 11:46:45

标签: r visual-studio data.table r-markdown rtvs

我试图获得一个简单的R Markdown文档,该文档与Visual Studio(RTVS)2017(15.7.4)中的data.table包一起使用,无济于事。

这是最小可复制的.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')

     

':='(z,7:9)中的错误:检查is.data.table(DT)== TRUE。   另外,:=和':='是在j中为我们定义的,仅一次且在   特定方式。请参阅help(“:=”)。

同样,同一文档在 R Studio 中完全没有问题。

我确实注意到这两个shell对pandoc的调用略有不同:

R Studio通话:

  

“ C:/ PROGRA〜2 / Pandoc / pandoc” + RTS -K512m -RTS dt_error.utf8.md-至   html4 --from   markdown + autolink_bare_uris + ascii_identifiers + tex_math_single_backslash + smart   --output dt_error.html-电子邮件混淆无-自包含-独立--section-divs --template“ C:\ Users \ bmore \ Documents \ R \ win-library \ 3.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   -至html4-从markdown + autolink_bare_uris + ascii_identifiers + tex_math_single_backslash + smart   --output pandoc8c8870d27b22.html-电子邮件混淆无-自包含-独立--section-divs --template“ C:\ Users \ bmore \ Documents \ R \ win-library \ 3.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 /交互模式下正常运行,当尝试“编织”为任何输出类型(html,pdf,doc)时,会发生错误。 / em>

sessionInfo()
  

R版本3.5.0(2018-04-23)平台:x86_64-w64-mingw32 / x64(64位)   运行于:Windows 10 x64(内部版本17134)

     

Matrix产品:默认

     

语言环境:1 LC_COLLATE = English_United States.1252   LC_CTYPE = English_United States.1252 LC_MONETARY = English_United   状态1252 LC_NUMERIC = C
  LC_TIME =英语_美国。1252

     

附加的基本软件包:1统计信息图形grDevices utils
  数据集方法基础

     

其他附加软件包:1 rmarkdown_1.10 knitr_1.20
  ggplot2_2.2.1 dplyr_0.7.6 data.table_1.11.4

     

通过名称空间(未附加)加载:1 Rcpp_0.12.17
  绑定器_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断言_0.2.0摘要_0.6.15
  tibble_1.4.2 bindrcpp_0.2.2 purrr_0.2.5评估_0.10.1   胶水_1.2.0 labeling_0.3字符串i_1.1.7编译器_3.5.0

1 个答案:

答案 0 :(得分:0)

此问题已在data.table_1.11.8中得到确认,随后根据@Hugh Ugh的上述评论进行了确认。

但是,如果由于某种原因,任何人由于某种原因而不得不使用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")

    }
    ```