【发布时间】:2015-03-09 02:11:15
【问题描述】:
我正在编写一个简单的命令行 Rscript,它读取一些二进制数据并将其作为数字字符流输出。数据具有特定格式,R 有一个非常快速的库来处理相关的二进制文件。文件(700 万个字符)被快速读取 - 不到一秒:
library(affyio)
system.time(CEL <- read.celfile("testCEL.CEL"))
user system elapsed
0.462 0.035 0.498
我想将部分读取数据写入标准输出:
str(CEL$INTENSITY$MEAN)
num [1:6553600] 6955 225 7173 182 148 ...
如您所见,它是大约 650 万个整数的数字数据。
而且写的很慢:
system.time(write(CEL$INTENSITY$MEAN, file="TEST.out"))
user system elapsed
8.953 10.739 19.694
(这里是对文件进行写入,但对 Rscript 的标准输出进行写入需要相同的时间”
cat(vector) 根本没有提高速度。我发现的一项改进是:
system.time(writeLines(as.character(CEL$INTENSITY$MEAN), "TEST.out"))
user system elapsed
6.282 0.016 6.298
它与读取数据时的速度仍然相去甚远(它读取的数据是这个特定向量的 5 倍)。此外,在继续之前,我需要将整个向量转换为字符。另外,当我下沉到标准输出时,如果我不小心无法将流重定向到文件,我无法使用 CTRL+C 终止流。
所以我的问题是 - 有没有更快的方法来简单地将数字向量从 R 输出到标准输出?
另外,为什么读取数据比写入快得多?这不仅适用于二进制文件,而且一般来说:
system.time(tmp <- scan("TEST.out"))
Read 6553600 items
user system elapsed
1.216 0.028 1.245
【问题讨论】:
标签: r stdout writetofile