简单的λ.R 脚本 STDOUT 有趣的业务,当调用 RScript with bash (Windows 7)



目标:

我需要调用 RScript 函数输出以STDOUT以进行重定向。

控件:控制脚本为

x = "Hello World"
x

另存为控件。R

从 bash

$ RScript control.R
[1] "Hello World"

打破:

#!/usr/bin/env Rscript
# install.packages('lambda.r')
library('lambda.r')
greeting('en-US') %as% 'Hello'
greeting('en-GB') %as% 'Allo!'
greeting('en-AU') %as% 'GDay'
greeting('en-NZ') %as% 'Kia Ora!'

保存为问候语。R

从 bash

Master@L-BATESPRIME ~/Workspace/Lab/R
$ RScript greeting.R 'en-US'
Master@L-BATESPRIME ~/Workspace/Lab/R
$ RScript greeting.R 'en-NZ'
Master@L-BATESPRIME ~/Workspace/Lab/R
$ RScript greeting.R 'en-GB'
Master@L-BATESPRIME ~/Workspace/Lab/R
$

如果我在 R 会话中运行(以 RStudioRGui 为单位),每当我调用 greeting('my_arg') 时,R 控制台都会回显正确的值。 但是,每当我尝试从 bash 通过 RScript 运行脚本时,我都会得到一个空输出。 我什至在命令行上附加了一个System.Diagnostics.Process来测试这一点,包装在STDIN上并尝试将STDOUT回显到控制台,但流包含一个空字符串。

如何获得:

Master@L-BATESPRIME ~/Workspace/Lab/R
$RScript greeting.R en-US

回声抨击?

注释

除了缺少输出语句之外,还有一些问题。具体来说,我认为需要发生以下几点:

  1. 脚本看不到正在传入的参数(例如en-US),因为没有设置接收它的语句(例如 args)。
    • 添加到脚本:args = commandArgs(trailingOnly=TRUE); msg = args[2]
    • 修改调用:Rscript greeting.R --args en-US
  2. 您已定义但未使用输入调用greeting()函数。因此,将没有输出。
    • 要纠正此问题,请在函数声明后添加:greeting(msg)
    • 要只回复问候语,请附上cat(...)

拟议的更改

从 bash

Rscript greetings.R --args en-US

问候。R

#!/usr/bin/env Rscript
# Grab the commands
args = commandArgs(trailingOnly=TRUE)
# Extract message
msg = args[2]
# Load in functional programming lib
library('lambda.r')
# Create functions
greeting('en-US') %as% 'Hello'
# install.packages('lambda.r')
library('lambda.r')
greeting('en-US') %as% 'Hello'
greeting('en-GB') %as% 'Allo!'
greeting('en-AU') %as% 'GDay'
greeting('en-NZ') %as% 'Kia Ora!'
# Call function with Greeting:
cat(greeting(msg),"n")

期望的输出

en-US

$ Rscript greetings.R --args en-US
Hello 

en-GB

$ Rscript greetings.R --args en-GB
Allo! 

等等...

相关内容

  • 没有找到相关文章