目标:
我需要调用 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 会话中运行(以 RStudio
或 RGui
为单位),每当我调用 greeting('my_arg')
时,R 控制台都会回显正确的值。 但是,每当我尝试从 bash 通过 RScript 运行脚本时,我都会得到一个空输出。 我什至在命令行上附加了一个System.Diagnostics.Process
来测试这一点,包装在STDIN
上并尝试将STDOUT
回显到控制台,但流包含一个空字符串。
如何获得:
Master@L-BATESPRIME ~/Workspace/Lab/R
$RScript greeting.R en-US
回声抨击?
注释
除了缺少输出语句之外,还有一些问题。具体来说,我认为需要发生以下几点:
- 脚本看不到正在传入的参数(例如
en-US
),因为没有设置接收它的语句(例如args
)。- 添加到脚本:
args = commandArgs(trailingOnly=TRUE); msg = args[2]
- 修改调用:
Rscript greeting.R --args en-US
- 添加到脚本:
- 您已定义但未使用输入调用
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!
等等...