从knitr调用来自fread的奇怪输出

时间:2013-03-12 20:01:38

标签: r data.table knitr

我正在使用fread中最近推出的data.table函数来读取数据文件。 当我将代码包装到knitr(Rmd)文档中时,我注意到一些奇怪的输出,即:

## 
0%

即使verbose的{​​{1}}选项设置为FALSE。我已经使用fread来隐藏此输出,但我想向包作者报告确切的问题。这是一个最小的例子,

sink

什么是0%输出?

3 个答案:

答案 0 :(得分:15)

这是一个%进度计数器。对我来说,打印0%,5%,10%,... 95%,100%(例如),最后一个\r,使其显示在{{1}调用下方的一行上在提示符下键入时。

但是当从函数,批处理和编织器调用时,这是不可取的。这已被删除。来自NEWS for v1.8.9(rev 851):

  
      
  • %进度控制台计量表已被删除。在批处理模式,日志文件和不处理fread的报告中,输出很不方便。要检测\r的位置太难了,而且,通过在C for循环中保存代码,删除它会加快fread的速度(这就是为什么它不是可选的) 。使用操作系统的系统监视器确认fread正在进行中。感谢Baptiste强调:
         Strange output from fread when called from knitr
  •   

快速提醒完整性。从fread的顶部开始:

  

此功能仍在开发中 。例如,读取日期   作为角色(他们可以使用优秀的   快速包或标准基本功能)和嵌入式引号(“\”“   和“”“”)有问题。还有其他已知问题没有   已修复,功能尚未实施。但是,你可能会发现它   在许多情况下都有效。请向datatable-help或Stack报告问题   溢出的data.table标记。

     

尚未用于生产 。不是因为它在某种意义上是不稳定的   它崩溃或有缺陷(你的测试将显示它是否是   在你的情况下是否稳定)但是因为fread的论点和   行为很可能在未来发生变化;即,我们期望   (希望是次要的)非向后兼容的变化。为什么会这样   然后发布到CRAN?因为要求维护版本   CRAN维护人员遵守R-devel中新的更严格的测试,以及a   很少的Bioconductor包依赖于data.table和Bioconductor   要求包传递R-devel检查。离开的速度更快   畏惧并写下这些段落,而不是畏缩。

答案 1 :(得分: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")

看,没有进度条。


在实际层面上,我认为让results = 'hide'甚至include = FALSE为这样的步骤是明智的。

您不希望在步骤中重复此类读取,实际上,您只想一次读取数据,然后将序列化(使用savesaveRDS或类似) ,所以你可以在下次使用它(这会更快)。


根据评论

进行编辑

我会将处理分成几个较小的块。然后,您可以不在块中包含读取,但包括未评估的虚拟版本(因此您可以查看代码,但不包括结果)

```{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
```

答案 2 :(得分:0)

showProgress中有一个名为fread的参数,如果将其设置为FALSE,则您将看不到进度输出。 (它有助于降价。)