从Web界面自动安装R包

时间:2014-02-04 14:44:38

标签: r ubuntu package

为了提供一种简单的方法来扩展我的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中执行?)

如何应对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(){
...
})

1 个答案:

答案 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);