bap*_*ste 14 r knitr data.table
我正在使用最近推出的fread函数data.table来读取数据文件.当我将代码包装到knitr(Rmd)文档中时,我注意到一些奇怪的输出,即:
##
0%
Run Code Online (Sandbox Code Playgroud)
即使verbose选项fread设置为FALSE.我曾经sink隐藏过这个输出,但是我想向包作者报告确切的问题.这是一个最小的例子,
library(knitr)
test = "```{r}
require(data.table)
fread('1 2 3\n')
```"
knit2html(text=test, output="test.html")
browseURL("test.html")
Run Code Online (Sandbox Code Playgroud)
什么是0%的输出?
Mat*_*wle 15
这是一个%进度计数器.对我来说,它打印0%,5%,10%,... 95%,100%(例如),\r最后使其显示在fread提示输入时的调用下面的一行上.
但是当从函数,批处理和编织器调用时,这是不可取的.这已被删除.来自NEWS for v1.8.9(rev 851):
- %进度控制台计量表已被删除.在批处理模式,日志文件和无法处理的报告中,输出很不方便
\r.通过在C for循环中保存代码(这就是为什么它不是可选的)fread,很难检测到调用的位置,加上,删除它会加快fread一点.使用操作系统的系统监视器确认fread正在进行中.感谢Baptiste突出显示:
来自knitr的fread的奇怪输出
只是快速提醒完整性.从顶部?fread:
此功能仍在开发中.例如,日期被读作字符(之后可以使用优秀的快速时间包或标准基本函数进行转换)和嵌入式引号("\""和"""")有问题.还有其他已知问题没有已经修复并且功能尚未实现.但是,您可能会发现它在许多情况下都有效.请向datatable-help或Stack Overflow的data.table标记报告问题.
还没有用于生产.并不是因为它在崩溃或有缺陷的意义上是不稳定的(你的测试会证明它是否在你的情况下是稳定的)但是因为fread的论点和行为在将来可能会改变; 也就是说,我们期望做出(希望是次要的)非向后兼容的变化.为什么它已经发布到CRAN呢?因为CRAN维护人员要求维护版本遵守R-devel中新的更严格的测试,并且一些Bioconductor软件包依赖于data.table和Bioconductor要求软件包通过R-devel检查.让fread进入并写下这些段落更快,而不是畏缩.
mne*_*nel 12
报告不是问题.
正如Matthew Dowle所说,这是一个进步的反击 fread
您可以设置results = 'hide'以避免包含这些结果
library(knitr)
test = "```{r, results = 'hide'}
require(data.table)
fread('1 2 3\n')
```"
knit2html(text=test, output="test.html")
browseURL("test.html")
Run Code Online (Sandbox Code Playgroud)
看,没有进度条.
在实际层面上,我认为拥有results = 'hide'甚至是include = FALSE这样的一步是明智的.
你不会希望重复这样的步骤阅读,实际上,你永远只需要读取一次数据,然后你会序列化(使用save,saveRDS或类似的),所以你可以用它下一次(这将是更快).
根据评论进行编辑
我会将处理分成几个较小的块.然后,您可以不在块中包含读取,但包括未评估的虚拟版本(因此您可以查看代码,但不包括结果)
```{r libraries}
require(data.table)
```
```{r loaddata, include = FALSE}
DT <- fread('yourfile')
```
```{r loaddummy, ref.label = 'loaddata', eval = FALSE, echo = TRUE}
```
```{r dostuff}
# doing other stuff
```
Run Code Online (Sandbox Code Playgroud)