是否存在用于从stdin读取的fread模拟?

时间:2013-07-01 20:19:07

标签: linux r pipe data.table

我想在(R)脚本中使用fread,该脚本将通过linux管道机制获取输入数据。以下是否有fread类似物?

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

我也会选择以其他方式阅读stdin,然后使用fread来解析它,因为我主要想要fread的高级分隔符和标题逻辑。< / p>

2 个答案:

答案 0 :(得分:23)

事实证明它很简单:

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

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


更新:version 1.8.11开始,可以在fread中使用shell命令,从而使另一种解决方案成为可能:

fread('cat /dev/stdin')

答案 1 :(得分:3)

所有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页面。