如何在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上进行了测试(