如何在R中自动执行命令?

bio*_*ian 2 r

我有一个非常基本的问题.

我是R的新用户,这些天我使用一个R包进行分析,我必须运行该包的R命令列表以获得所需的输出.我想创建我的分析管道并自动化它,以便我可以使用一个带有所需参数的单个R命令来完成我的工作.

我们在shell脚本中做的这类工作(我们添加了许多linux命令,awk/sed/perl行

请提供一些关于如何做到这一点的链接,我将非常感激.

mat*_*fee 14

假设这是我的分析管道:我想从正态分布中生成10个带有均值MU和标准差的数字SD,然后用它们做其他事情:

MU <- 1  # the mean
SD <- .5 # standard deviation
NUMBER_TO_GENERATE <- 10

x <- rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
# ... more analysis here.
Run Code Online (Sandbox Code Playgroud)

目前,我将这些命令复制粘贴到R终端.有几种方法可以"自动化"这个.

1.写一个函数

我将我的命令列表包含在一个大函数中,并将我的参数作为函数参数:

myFunction <- function( MU, SD, NUMBER_TO_GENERATE ) {
    x <- rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
    # ... rest of analysis
}
Run Code Online (Sandbox Code Playgroud)

现在在RI中可以做到myFunction(1, .5, 10),减少我必须键入的命令数量为1.

2.写一个脚本

我可以写一个脚本文件myScript.r.这就像一个bash脚本,除了它是一个R命令列表.

我可以要么把我原来的命令列表在那里,我也可以把我的功能在里面加上一个额外的语句在底部myFunction(1,.5,10).

然后从R 内部,我可以做到:

source('myScript.r')
Run Code Online (Sandbox Code Playgroud)

它将运行脚本中的所有R命令.

3.从外壳

如果你想从shell中获取这个脚本,我建议你有一个myScript.r包含该函数的文件.

然后查看Rscript(你可以?Rscript从R内部).这默认安装了R,您可以使用它从unix/windows命令行执行R命令.

例如:

[mathematical.coffee@bar ~]$ Rscript -e '1+1'
[1] 2
Run Code Online (Sandbox Code Playgroud)

特别是,你可以将方法1)和2)结合Rscript起来做以下事情:

[mathematical.coffee@bar ~]$ Rscript -e 'source("myScript.R"); myFunction( 1, .5, 10 )'
Run Code Online (Sandbox Code Playgroud)

运行你的功能.

或者你当然可以只包括myFunction(1, .5, 10)你的myScript.R,在这种情况下你可以做Rscript myScript.R.

前者的优点是如果你想做shell脚本(我只提到这个,因为你在你的问题中提到了bash脚本).在bash脚本中,我们可以执行以下操作:

#!/bin/bash
MU=1;
SD=.5;
NUM=10;

Rscript -e "source('myScript.r'); myFunction($MU,$SD,$NUM)"
Run Code Online (Sandbox Code Playgroud)

但是我认为没有将bash脚本与R脚本混合 - 正如我之前提到的,我只提到了这个选项,因为你在你的问题中提到了bash/unix脚本.