是否有一个fread模拟从标准input读取?

我想在(R)脚本中使用fread ,通过linuxpipe道机制获取input数据。 下面是否有fread模拟?

 read.csv(file = 'stdin', ...) 

我也会解决阅读stdin一些其他的方式,然后用fread来parsing它,因为我主要想要这个fread的高级分隔符和标题逻辑。

结果如下:

 fread('file:///dev/stdin') 

这是有效的,因为当前7个字符是“file://”或“http://”, fread实际上创建了一个临时文件,并使用download.file将数据复制到那里。


更新:从版本1.8.11开始,可以在fread使用shell命令,使得另一个解决方案成为可能:

 fread('cat /dev/stdin') 

所有read.*函数都在其引擎下使用“扫描”。 scan是相当低的水平,但是具有将数据线分析成不同类的能力。

 > mat <- matrix(scan(), 4,4) # will paste in block of data 1: 0.5 0.1428571 0.25 4: 0.5 0.1428571 0.25 7: 0.5 0.1428571 0.25 10: 0.5 0.1428571 0.25 13: 0.5 0.1428571 0.25 16: 0.5 17: # Terminate with two <cr>'s Read 16 items > mat [,1] [,2] [,3] [,4] [1,] 0.5000000 0.1428571 0.2500000 0.5000000 [2,] 0.1428571 0.2500000 0.5000000 0.1428571 [3,] 0.2500000 0.5000000 0.1428571 0.2500000 [4,] 0.5000000 0.1428571 0.2500000 0.5000000 > lst <- scan(what=list(double(0), "a")) 1: 4 t 2: 6 h 3: 8 l 4: 8 8 5: Read 4 records > lst [[1]] [1] 4 6 8 8 [[2]] [1] "t" "h" "l" "8" 

你也应该看看?connections页面。