如何在R中打开一个名为"stdin"的文件?...但不是实际的"标准输入"



如何在R中打开名为stdin的文件?换句话说,如何使用file()创建与名为stdin的实际文件的连接,而不是从标准输入中实际读取?

这里特别地,I想要打开";"标准输入";,而是一个名为CCD_ 4的文件。

我知道我可以在R中打开一个名为file.txt的文件,如下所示:

#!/usr/bin/env Rscript
input <- file("file.txt", "r")
l <- readLines(input, n=1)
cat(l)
cat("n")

运行时,上面的脚本会正确打印文件的第一行:

$ cat ./stdin
first line
second line
$ Rscript program.r 
first line

然而,当我尝试打开一个名为stdin的文件时,R似乎从实际的标准输入(键盘/重定向(中获取输入:

...
input <- file("stdin", "r")
...

以上尝试采用键盘输入:

$ Rscript program.r 
asdf  # my keyboard input
asdf  # output of the script
$ echo test | Rscript program.r 
test

如何实际打开名为stdin的文件?

字符串"stdin"file()中的一个保留字,表示打开标准输入(键盘/管道/重定向(。要打开到实际"stdin"文件的连接,可以使用"./stdin"作为file()的参数,如下所示:

#!/usr/bin/env Rscript
input <- file("./stdin", "r")
l <- readLines(input, n=1)
cat(l)
cat("n")

上面的代码成功地打印了名为stdin:的文件的第一行

$ cat ./stdin
first line
second line
$ Rscript program.r
first line

file()还有其他保留的文件名,下面是一个不完整的列表:

  • stdin:标准输入(键盘(
  • stdout:标准输出(终端屏幕(
  • stderr:标准错误输出(终端画面(

同样,要打开具有上述名称的实际文件,请在它们前面加上./

(这在R 4.1.3上进行了测试(

相关内容

最新更新