R, STDIN to Rscript



我正在尝试进行一个R脚本测试。R-可以直接从unix中的管道中获取文件或文本字符串,如中所示

file | test.R

或:

cat Sometext | test.R

我试着在这里和这里找到答案,但我显然错过了一些东西。是上面的管道还是下面的脚本给了我一个错误,比如:

me@lnx: cat AAAA | test.R
bash: test.R: command not found
cat: AAAA: No such file or directory

我的测试脚本:

#!/usr/bin/env Rscript
input <- file("stdin", "r")
x <- readLines(input)
write(x, "")

更新

脚本:

#!/usr/bin/env Rscript
con <- file("stdin")
open(con, blocking=TRUE)
x <- readLines(con)
x <- somefunction(x) #Do something or nothing with x
write(x,"")
close(con)

则CCD_ 1和CCD_。

我仍然喜欢这里的r而不是Rscript(但我在这方面没有偏见…(

edd@rob:~$ (echo "Hello,World";echo "Bye,Bye") | r -e 'X <- readLines(stdin());print(X)' -
Hello,World
Bye,Bye
[1] "Hello,World" "Bye,Bye"
edd@rob:~$ 

r也可以直接read.csv()

edd@rob:~$ (echo "X,Y"; echo "Hello,World"; echo "Bye,Bye") | r -d -e 'print(X)' -
X     Y
1 Hello World
2   Bye   Bye
edd@rob:~$

-d本质上是一个预定义的"通过read.csv将stdin读入X",我想我是从rio或其他包中借鉴了这个想法。

编辑:您的示例适用于小的更改:

  1. 使其可执行:chmod 0755 ex.R
  2. 管道输出正确,即使用echo而不是cat file | ./test.R0
  3. 对当前目录中的文件使用./ex.R表示法
  4. 我把它改为使用print(x)

然后:

edd@rob:~$ echo AAA | ./ex.R
[1] "AAA"
edd@rob:~$

我通常使用终端应用程序(BASH shell(中的R。我只做了一些Rscript的实验,但包括#!行允许脚本在R中运行,同时允许使用RScript生成可执行文件。我必须使用chmod在我的测试文件上设置可执行标志。您对write((的调用应该将相同的输出打印到R或RScript中的控制台,但如果我想将输出保存到一个文件中,我会调用sink("fileName"(打开连接,并调用sink((关闭连接。这通常会让我控制输出及其呈现方式。如果我将我的脚本称为"myScript.rs"并使其可执行(chmod u+x myScript.rr(,我可以键入类似的内容/myScript.rs来运行它并在OS X或Linux上获得输出。您可以尝试重定向>或>>来创建或附加,而不是管道|。

相关内容

  • 没有找到相关文章

最新更新