14

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

## 
0%

即使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")

什么是 0% 输出?

4

3 回答 3

15

这是一个百分比进度计数器。对我来说,它会打印 0%, 5%, 10%, ... 95%, 100% (例如),最后带有 a ,以便在提示符下键入时\r显示在调用下方的一行上。fread

但是当从函数、批处理和 knitr 调用时,这是不可取的。现在已将其删除。来自 v1.8.9 (rev 851) 的新闻:

  • % 进度控制台仪表已被删除。在批处理模式、日志文件和不处理的报告中,输出不方便\r。很难检测fread从哪里调用,另外,通过将代码保存在 C for 循环中来删除它会加快fread一点速度(这就是为什么它不是可选的)。使用操作系统的系统监视器来确认 fread 正在进行。感谢 Baptiste 突出显示:
    从 knitr 调用时 fread 的奇怪输出

只是对完整性的快速提醒。从顶部开始?fread

此功能仍在开发中。例如,日期被读取为字符(它们可以在之后使用优秀的 fasttime 包或标准基本函数进行转换)和嵌入引号(“\””和“”“”)有问题。还有其他已知问题没有已修复且功能尚未实现。但是,您可能会发现它在许多情况下都有效。请向 datatable-help 或 Stack Overflow 的 data.table 标签报告问题。

尚未用于生产用途。不是因为它在崩溃或错误的意义上不稳定(您的测试将显示它在您的情况下是否稳定),而是因为 fread 的论点和行为将来可能会改变;即,我们希望进行(希望是较小的)非向后兼容的更改。为什么它会被发布到 CRAN 呢?因为 CRAN 维护人员要求维护版本符合 R-devel 中新的更严格的测试,并且一些 Bioconductor 包依赖于 data.table 并且 Bioconductor 要求包通过 R-devel 检查。留下 fread 并写下这些段落比取出 fread 更快。

于 2013-03-13T00:01:18.123 回答
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
```
于 2013-03-13T00:26:25.967 回答
0

里面有个参数调用showProgressfread如果设置为FALSE,就看不到进度输出了。(在制作 r 降价时很有用。)

于 2018-02-17T04:08:53.047 回答