分发使用外部包的R脚本

3
我正在与大多数非技术用户组成的小团队中工作,并希望在团队内部分发一个R脚本。该脚本在shebang行中使用“RScript”,需要一些命令行参数,并生成一个图形文件和一些文本作为输出。
我想知道是否有办法确保脚本使用的任何外部包(即使是用于解析参数的optparse之类的东西)可供用户使用。我预计团队中的每个人都能按照说明从命令行调用程序,但要求人们启动R并下载和安装依赖项可能太过繁琐。我曾经在Python中的类似情况下使用过py2exe或py2app,但我想知道是否有等效的方法或至少是最佳实践来分发R脚本。

3
当你说“libraries”的时候,你是指“packages”吗? - Spacedman
是的。对不起,术语可能有些模糊。 - primelens
2个回答

10

创建一个包,在DESCRIPTION中声明依赖项为Depends。这是可行的,并在各种操作系统上进行了广泛测试。

您还可以将包放置在本地存储库中,使更新更加容易且可能自动完成。我曾经编写过一个公司内部的包,在其自身的启动代码中检查本地存储库是否有更新版本可用。


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仓库,以免用户被询问,并且在require中使用一些选项来停止警告。


好的回答。此外,除了Dirk的建议之外,人们还可以指定本地存储库/服务器,这样就不需要访问CRAN了。如果使用本地服务器,则管理员可以指定自动更新内部派生包或套件,以确保安装的一致性。如果用户具有不同版本的软件包,则可能会出现一些问题,如果其中一个崩溃或者没有很好地测试所有内容的行为方式,那么这将是一个噩梦。 - Iterator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接