【发布时间】:2014-02-04 14:44:37
【问题描述】:
为了提供一种简单的方法来使用更多包扩展我的 webapp,我开始考虑通过文件链接自动安装 R 包。
为了简单起见,假设我有一个输入字段和一个按钮。 输入字段填充了指向包源的链接(例如http://cran.r-project.org/src/contrib/C50_0.1.0-16.tar.gz)。 点击按钮后,应该下载并安装包。
我找到了所需的命令:
- 下载中:
wget http://cran.r-project.org/src/contrib/C50_0.1.0-16.tar.gz - 安装1:
sudo R CMD INSTALL path/C50_0.1.0-16.tar.gz --library =/usr/lib/R/site-library - 安装2:
sudo R CMD INSTALL path/C50_0.1.0-16.tar.gz --library =/usr/local/lib/R/site-library - 安装3:
sudo R CMD INSTALL path/C50_0.1.0-16.tar.gz --library =/usr/lib/R/library
这些命令存放在哪里以及如何调用脚本? (也许是 php 中的 exec?)
如何处理sudo?有没有办法通过 ajax 等发送密码或完全避免密码要求?
你怎么看?
编辑(解决方案):
因为在接下来的几个小时内我无法回答自己的问题,所以我使用最终得到的解决方案来编辑我的问题。
经过一些研究和你的提示,我最终得到了这段代码(在http://www.r-bloggers.com/installing-r-packages/ 找到并根据我的需要定制)
installPackage.html
<%
cat(".Rprofile: Setting UK repositoryn")
r = getOption("repos") # hard code the UK repo for CRAN
r["CRAN"] = "http://cran.uk.r-project.org"
options(repos = r)
rm(r)
install.packages("packageNameFromAjaxCall", lib="/usr/lib/R/site-library")
install.packages("packageNameFromAjaxCall", lib="/usr/local/lib/R/site-library")
install.packages("packageNameFromAjaxCall", lib="/usr/lib/R/library")
%>
调用类似
$.post('path/brew/installPackage.html',{package:packageFromInput},function(){
...
})
【问题讨论】:
-
您熟悉
devtools包吗? -
如果有人想安装他们的
rootkit_0.1.0.tar.gz包怎么办? -
@RicardoSaporta 还没有。快速浏览后,我看不出
devtools是如何为我的问题提供解决方案的。 -
@JoshuaUlrich 这就是为什么只有我和共同管理员能够安装新软件包的原因。此功能不适用于普通用户。
-
有理由不使用
install.packages()吗?