【问题标题】:read.table function and stdinread.table 函数和标准输入
【发布时间】:2013-10-10 18:17:01
【问题描述】:

我有一个制表符分隔的文本文件,我正在尝试使用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 从标准输入中读取?我是否遗漏了一些非常明显的东西?

【问题讨论】:

    标签: r stdin


    【解决方案1】:

    ?stdin 说:

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

    还有:

    当 R 从文件中读取脚本时,file 是 ‘console’:这是允许内联数据的传统用法……

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

    【讨论】:

    • 太棒了。 file("stdin") 而不是 stdin() 或 "/dev/stdin" 成功了。
    猜你喜欢
    • 1970-01-01
    • 2013-06-13
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2014-07-22
    • 2021-10-20
    • 2010-12-01
    相关资源
    最近更新 更多