【问题标题】:Install R packages automatically from webinterface从 web 界面自动安装 R 包
【发布时间】: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()吗?

标签: r ubuntu package


【解决方案1】:

我已经实现了用户定义函数来静默安装和加载所需的 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);

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多