分发使用外部包的R脚本

时间:2011-12-29 04:39:17

标签: r scripting

我在一小部分非技术用户中工作,并希望在群组中分发R脚本。这在shebang行中使用'RScript',获取一些命令行参数并生成图形文件和一些文本作为输出。

我想知道是否有办法确保脚本使用的任何外部包(甚至类似于解析参数的optparse)都可供用户使用。我希望该组中的每个人都能够通过按照说明从命令行调用该程序,但要求人们启动R并下载和安装依赖项可能太多了。我在Python中使用了py2exe或py2app来处理类似情况,但我想知道是否有相同的方法或至少是分发R脚本的最佳实践。

2 个答案:

答案 0 :(得分:9)

创建一个包,将依赖关系声明为Depends:在DESCRIPTION中。这是可行的,并且在OS之间进行了广泛的测试。

然后,您还可以将包放在本地存储库中,从而使更新更容易,甚至可以自动更新。我曾写过一个公司内部的软件包,它在自己的启动代码中检查了本地存储库中是否有更新的版本。

答案 1 :(得分:7)

Dirk为您提供了最佳实践解决方案(具有依赖关系的包),但是下一个最佳实践解决方案可能是使用require(foo)并测试包是否存在,然后如果没有则获取它。类似的东西:

if(require(foo)){
 # foo loaded okay
 cat("we got foo\n")
}else{
 cat("uh oh, no foo. let's get it\n")
 install.packages("foo")
}

您可能希望在install.packages中指定CRAN repo,以便不询问用户,还可以使用require上的某些选项来停止警告。