在R中安装所需的软件包的最佳方法

3
library(proto)
library(gsubfn)
library(tidyr)
library(dplyr)
library(ggplot2)
library(stringr)
library(magrittr)
library(usmap)
library(RCurl)
library(RJSONIO)
library(sqldf)

对于上述库的列表,我没有相应的软件包安装代码行。最终我通过谷歌搜索软件包名称并手动安装了它们。
当您有一个长列表的库集合,并且不确定哪些已安装在您的工作空间中或不知道要安装哪些包时,最好的安装所有必需包的方法是什么?
您使用require()函数吗?如果原始作者最初使用install.package()函数,我不确定是否想要更改该函数以加载软件包。
我想知道一种更有效的方法来安装软件包,而不必手动谷歌和安装它们。

1
在我看来,使用pacman::p_load()比接受的答案更好。p_load可以检查并安装来自CRANBioConductor的两个包。 https://cran.r-project.org/web/packages/pacman/vignettes/Introduction_to_pacman.html - undefined
1
谢谢Tung。P_load也是一个很好的选择。 - undefined
5个回答

6

只需要将引用的软件包名称用c()括起来即可,例如:

pkgs <- c("proto","gsubfn","tidyr","dplyr","ggplot2",
          "stringr","magrittr","usmap","RCurl","RJSONIO","sqldf")

# Install:
install.packages(pkgs)

接下来,如果你也想加载这些包:

# Load:
lapply(pkgs, require, character.only = TRUE)

谢谢。我之前没有意识到我可以一次获取安装的软件包列表。 - undefined

6

你是否正在寻找类似这样的东西?

listOfPackages <- c("proto","gsubfn","tidyr","dplyr","ggplot2",
                    "stringr","magrittr","usmap","RCurl",
                    "RJSONIO","sqldf")
for (i in listOfPackages){
     if(! i %in% installed.packages()){
         install.packages(i, dependencies = TRUE)
     }
     require(i)
}

您可以使用libraryrequire来加载一个包。如果该包已经加载,require不会强制重新加载,而library会。


另一种我没有想到的好方法。谢谢你。 - undefined
如何指定列表中某个软件包的版本? - undefined
1
@LF 你可以有两个不同的向量:一个用于存储软件包名称,另一个用于存储版本号。然后,可以使用versions::install.versions(packageNames[i], packageVersions[i])代替install.packages(i)这一行代码。你可能需要查看这个页面 - undefined

5
请查看 librarian 包。
# attach packages to the search path, installing them from CRAN or GitHub if needed
librarian::shelf(plyr, tidyverse, knitr, ggplot2, scales, sqldf)

# List of all loaded packages
# (.packages()) 
librarian:::check_attached()

# unload
librarian::unshelf(plyr, tidyverse, knitr, ggplot2, scales, reshape2, also_depends = TRUE)
# print(.Last.value)

2

只安装系统中尚未存在的软件包,然后加载所有所需的软件包。

原始答案: "最初的回答"

#Installing Packages that are not already available in the system 
list.of.packages <- c("proto","gsubfn","tidyr","dplyr","ggplot2",
          "stringr","magrittr","usmap","RCurl","RJSONIO","sqldf")
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])]
if(length(new.packages)) install.packages(new.packages)

#Loading Packages
invisible(lapply(list.of.packages, require, character.only = TRUE))

1
个人而言,我更喜欢使用以下代码片段,它只安装当前未安装的包[节省大量时间],同时加载所有列出的包。
我还建议您通过调用install.packages(<package list, dependencies = TRUE)显式加载软件包依赖项。

示例代码片段

requiredPackages <- c("proto","gsubfn","tidyr","dplyr","ggplot2",
                      "stringr","magrittr","usmap","RCurl","RJSONIO","sqldf")

ipak <- function(pkg){
  new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg))
    install.packages(new.pkg, dependencies = TRUE)
  sapply(pkg, require, character.only = TRUE)
}

ipak(requiredPackages)

控制台输出

第一次调用时,所有内容都已安装和/或加载,第二次运行时,如果尚未加载,则会加载所有内容。

> requiredPackages <- c("proto","gsubfn","tidyr","dplyr","ggplot2",
+                       "stringr","magrittr","usmap","RCurl","RJSONIO","sqldf")
> ipak <- function(pkg){
+   new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
+   if (length(new.pkg))
+     install.packages(new.pkg, dependencies = TRUE)
+   sapply(pkg, require, character.only = TRUE)
+ }
> ipak(requiredPackages)
   proto   gsubfn    tidyr    dplyr  ggplot2  stringr magrittr    usmap 
    TRUE     TRUE     TRUE     TRUE     TRUE     TRUE     TRUE     TRUE 
   RCurl  RJSONIO    sqldf 
    TRUE     TRUE     TRUE 

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