首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中自动执行命令?

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

Stack Overflow用户
提问于 2012-04-26 14:06:49
回答 3查看 8K关注 0票数 2

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

我是R的新用户,这些天我使用一个R包进行分析,我必须运行该包的R命令列表才能获得所需的输出。我想让我的分析流水线自动化,这样我就可以使用一个带有所需参数的R命令来完成我的工作。

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

请为我提供一些如何做到这一点的链接,我将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-26 14:31:12

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

代码语言:javascript
复制
MU <- 1  # the mean
SD <- .5 # standard deviation
NUMBER_TO_GENERATE <- 10

x <- rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
# ... more analysis here.

此时,我将这些命令复制粘贴到R终端。有几种方法可以“自动化”这个过程。

1.编写函数

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

代码语言:javascript
复制
myFunction <- function( MU, SD, NUMBER_TO_GENERATE ) {
    x <- rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
    # ... rest of analysis
}

现在在R中,我可以只执行myFunction(1, .5, 10),将我必须键入的命令数量减少到1。

2.编写脚本

我可以写一个脚本文件myScript.r。这类似于bash脚本,只是它是一个R命令列表。

我可以把我的原始命令列表放在那里,或者我可以把我的函数放在那里,并在底部的myFunction(1,.5,10)中加上一个额外的语句。

然后在R中,我可以这样做:

代码语言:javascript
复制
source('myScript.r')

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

3.从shell中

如果您想从shell中获取此脚本,我建议使用一个包含函数的文件myScript.r

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

例如:

代码语言:javascript
复制
[mathematical.coffee@bar ~]$ Rscript -e '1+1'
[1] 2

具体地说,您可以将方法1)和2)与Rscript相结合,以执行以下操作:

代码语言:javascript
复制
[mathematical.coffee@bar ~]$ Rscript -e 'source("myScript.R"); myFunction( 1, .5, 10 )'

来运行你的函数。

当然,您也可以只将myFunction(1, .5, 10)包含在myScript.R中,在这种情况下,您可以只执行Rscript myScript.R

前者的优点是如果您想要执行shell脚本(我之所以提到这一点,是因为您在问题中提到了bash脚本)。在bash脚本中,我们可以这样做:

代码语言:javascript
复制
#!/bin/bash
MU=1;
SD=.5;
NUM=10;

Rscript -e "source('myScript.r'); myFunction($MU,$SD,$NUM)"

但是,我主张不要将bash脚本与R脚本混合-正如我前面提到的,我之所以提到这个选项,是因为您在问题中提到了bash/unix脚本。

票数 14
EN

Stack Overflow用户

发布于 2012-04-26 14:15:36

函数可能就是您要查找的函数

代码语言:javascript
复制
foo <- function() {
 data <- data.frame(a=1:10, b=10:1)
 plot(data)

  # many more commands here
}

然后,您只需调用foo(),所有命令都会运行。

有关更深入的信息,请参阅R help

此外,您可能会对source()感兴趣,请参阅?source

票数 2
EN

Stack Overflow用户

发布于 2016-04-01 15:14:42

另一种选择是使用Rscript运行您的程序。命令行中的参数可以通过函数args <- commandArgs(trailingOnly=TRUE)访问(它们以列表的形式返回)

例如,使用上面的matheatical.cafee示例,您的脚本将如下所示

键入'contributors()‘获取更多信息,键入'citation()’了解如何在出版物中引用R或R包。

代码语言:javascript
复制
args <- commandArgs(trailingOnly=TRUE)
MU <- as.numeric(args[[1]])  # the mean
SD <- as.numeric(args[[2]]) # standard deviation
NUMBER_TO_GENERATE <- as.integer(args[[3]])

rnorm(NUMBER_TO_GENERATE, mean=MU, sd=SD)
doOtherStuff(x)

然后你可以像Rscript myscript.R 2.0 0.1 100一样调用你的函数

如果你想对参数(例如--filename)做一些更花哨的事情,你可以使用optparse库。http://www.r-bloggers.com/passing-arguments-to-an-r-script-from-command-lines/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10328062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档