为了提供一种简单的方法来扩展我的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
sudo R CMD INSTALL path/C50_0.1.0-16.tar.gz --library =/usr/lib/R/site-library
sudo R CMD INSTALL path/C50_0.1.0-16.tar.gz --library =/usr/local/lib/R/site-library
sudo R CMD INSTALL path/C50_0.1.0-16.tar.gz --library =/usr/lib/R/library
存储这些命令的位置以及如何调用脚本? (也许在php中执行?)
如何应对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(){
...
})
答案 0 :(得分:0)
我已经实现了用户定义函数来静默安装和加载所需的R包。希望可能有帮助。这是代码:
# Function to Install and Load R Packages
Install_And_Load <- function(Required_Packages)
{
Remaining_Packages <- Required_Packages[!(Required_Packages %in% installed.packages()[,"Package"])];
if(length(Remaining_Packages))
{
install.packages(Remaining_Packages);
}
for(package_name in Required_Packages)
{
library(package_name,character.only=TRUE,quietly=TRUE);
}
}
# Specify the list of required packages to be installed and load
Required_Packages=c("ggplot2", "Rcpp");
# Call the Function
Install_And_Load(Required_Packages);