我在一小部分非技术用户中工作,并希望在群组中分发R脚本。这在shebang行中使用'RScript',获取一些命令行参数并生成图形文件和一些文本作为输出。
我想知道是否有办法确保脚本使用的任何外部包(甚至类似于解析参数的optparse)都可供用户使用。我希望该组中的每个人都能够通过按照说明从命令行调用该程序,但要求人们启动R并下载和安装依赖项可能太多了。我在Python中使用了py2exe或py2app来处理类似情况,但我想知道是否有相同的方法或至少是分发R脚本的最佳实践。
答案 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上的某些选项来停止警告。