5

我有一个制表符分隔的文本文件,我正在尝试使用该read.table函数将其加载到 R 中。脚本的前几行如下所示

#!/usr/bin/env Rscript
args <- commandArgs(trailingOnly=TRUE)
data <- read.table(args[1], header=TRUE, sep="\t", quote="")
# process the data

这行得通。我最初试图让 R 从标准输入中读取数据,但没有成功。我的第一种方法...

#!/usr/bin/env Rscript
data <- read.table(stdin(), header=TRUE, sep="\t", quote="")
# process the data

......似乎根本不起作用。我的第二种方法...

#!/usr/bin/env Rscript
data <- read.table("/dev/stdin", header=TRUE, sep="\t", quote="")
# process the data

...读取数据文件,但是(由于某种原因,我不明白)前 20 行左右被破坏,这是一个大问题(特别是因为这些行包含标题信息)。有没有办法read.table从标准输入中读取?我错过了一些完全明显的东西吗?

4

1 回答 1

9

?stdin说:

stdin()指的是“控制台”,而不是进程的 C 级“标准输入”。GUI 控制台(可能没有活动的“标准输入”,如果有,则可能未连接到控制台输入)以及嵌入式应用程序中的区别很重要。如果要访问 C 级文件流“stdin”,请使用 file("stdin").

和:

当 R 从文件中读取脚本时,文件就是“控制台”:这是允许内联数据的传统用法……</p>

这就是观察到的行为的可能原因。原则上,您可以 read.table从标准输入 - 但在大多数(几乎所有?)情况下,您会希望通过file('stdin').

于 2013-10-10T18:23:52.273 回答