检查并安装缺失包的函数输出
Output of function to check for and install missing packages
对文字墙深表歉意。
基于这个post and this post,主要是,我写了一个函数让我在每个R脚本的开头安装一个包列表,而不必经历每个"Call function -> get error message -> install package"的循环时间。函数是这样的:
`packages_installed <- function(pkg_list){
pkgs <- unlist(pkg_list)
req <- unlist(lapply(pkgs, require, character.only = TRUE))
not_installed <- pkgs[req == FALSE]
lapply(not_installed, install.packages,
repos = "http://cran.r-project.org")#also add lib.loc later
lapply(pkgs, library, character.only = TRUE)
`
但是,当我尝试 运行 时,输出是已安装包的列表。例如,这是我的试用 运行:
```package_list <- c("dagitty","MMWRweek","ggplot2","parallel")```
```packages_installed(package_list)```
这是我的输出:
```
[[1]]
[1] "dagitty" "parallel" "CoxBoost" "prodlim"
[5] "Matrix" "survival" "spatstat" "rpart"
[9] "nlme" "spatstat.data" "ggmap" "leaflet"
[13] "spdep" "spData" "sp" "pdftools"
[17] "data.table" "forcats" "stringr" "dplyr"
[21] "purrr" "readr" "tidyr" "tibble"
[25] "tidyverse" "ggplot2" "sf" "RJSONIO"
[29] "stats" "graphics" "grDevices" "utils"
[33] "datasets" "methods" "base"
[[2]]
[1] "MMWRweek" "dagitty" "parallel" "CoxBoost"
[5] "prodlim" "Matrix" "survival" "spatstat"
[9] "rpart" "nlme" "spatstat.data" "ggmap"
[13] "leaflet" "spdep" "spData" "sp"
[17] "pdftools" "data.table" "forcats" "stringr"
[21] "dplyr" "purrr" "readr" "tidyr"
[25] "tibble" "tidyverse" "ggplot2" "sf"
[29] "RJSONIO" "stats" "graphics" "grDevices"
[33] "utils" "datasets" "methods" "base"
[[3]]
[1] "MMWRweek" "dagitty" "parallel" "CoxBoost"
[5] "prodlim" "Matrix" "survival" "spatstat"
[9] "rpart" "nlme" "spatstat.data" "ggmap"
[13] "leaflet" "spdep" "spData" "sp"
[17] "pdftools" "data.table" "forcats" "stringr"
[21] "dplyr" "purrr" "readr" "tidyr"
[25] "tibble" "tidyverse" "ggplot2" "sf"
[29] "RJSONIO" "stats" "graphics" "grDevices"
[33] "utils" "datasets" "methods" "base"
[[4]]
[1] "MMWRweek" "dagitty" "parallel" "CoxBoost"
[5] "prodlim" "Matrix" "survival" "spatstat"
[9] "rpart" "nlme" "spatstat.data" "ggmap"
[13] "leaflet" "spdep" "spData" "sp"
[17] "pdftools" "data.table" "forcats" "stringr"
[21] "dplyr" "purrr" "readr" "tidyr"
[25] "tibble" "tidyverse" "ggplot2" "sf"
[29] "RJSONIO" "stats" "graphics" "grDevices"
[33] "utils" "datasets" "methods" "base"
Warning messages:
1: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called ‘dagitty’
2: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called ‘MMWRweek’
```
我理解警告消息,它们是函数中 require
调用的输出。这是我每次调用该函数时的输出,即使已经安装并加载了包。据我所知,这些是全局环境中的包,我不清楚如何防止它们出现。感谢任何帮助。
necessary_packages <- c("DBI", "odbc")
new_packages <- necessary_packages[!(necessary_packages %in% installed.packages()[,"Package"])]
if(seq_along(new_packages) > 0){install.packages(new_packages, dependencies = TRUE)}
lapply(necessary_packages, require, character.only = TRUE)
朋友帮我在library
函数的文档中找到了答案,我应该在提问之前仔细阅读一下:
"Normally library returns (invisibly) the list of attached packages, but TRUE or FALSE if logical.return is TRUE. When called as library() it returns an object of class "libraryIQR",对于库 (help=),class "packageInfo" 之一。"
相应地,我修改了我的功能,只return不管它是否已经加载。
packages_installed <- function(pkg_list){
pkgs <- unlist(pkg_list)
req <- unlist(lapply(pkgs, require, character.only = TRUE,
quietly = TRUE))
not_installed <- pkgs[req == FALSE]
lapply(not_installed, install.packages,
repos = "http://cran.r-project.org")#also add lib.loc later
sapply(pkgs, library, character.only = TRUE,
logical.return = TRUE, warn.conflicts = TRUE)
}
现在参数的输出 package_list
package_list <- list("rNOMADS","adehabitatMA","raster","rgdal","rgeos"); packages_installed(package_list)
读作
rNOMADS adehabitatMA raster rgdal rgeos
TRUE TRUE TRUE TRUE TRUE
对文字墙深表歉意。
基于这个post and this post,主要是,我写了一个函数让我在每个R脚本的开头安装一个包列表,而不必经历每个"Call function -> get error message -> install package"的循环时间。函数是这样的:
`packages_installed <- function(pkg_list){
pkgs <- unlist(pkg_list)
req <- unlist(lapply(pkgs, require, character.only = TRUE))
not_installed <- pkgs[req == FALSE]
lapply(not_installed, install.packages,
repos = "http://cran.r-project.org")#also add lib.loc later
lapply(pkgs, library, character.only = TRUE)
`
但是,当我尝试 运行 时,输出是已安装包的列表。例如,这是我的试用 运行:
```package_list <- c("dagitty","MMWRweek","ggplot2","parallel")```
```packages_installed(package_list)```
这是我的输出:
```
[[1]]
[1] "dagitty" "parallel" "CoxBoost" "prodlim"
[5] "Matrix" "survival" "spatstat" "rpart"
[9] "nlme" "spatstat.data" "ggmap" "leaflet"
[13] "spdep" "spData" "sp" "pdftools"
[17] "data.table" "forcats" "stringr" "dplyr"
[21] "purrr" "readr" "tidyr" "tibble"
[25] "tidyverse" "ggplot2" "sf" "RJSONIO"
[29] "stats" "graphics" "grDevices" "utils"
[33] "datasets" "methods" "base"
[[2]]
[1] "MMWRweek" "dagitty" "parallel" "CoxBoost"
[5] "prodlim" "Matrix" "survival" "spatstat"
[9] "rpart" "nlme" "spatstat.data" "ggmap"
[13] "leaflet" "spdep" "spData" "sp"
[17] "pdftools" "data.table" "forcats" "stringr"
[21] "dplyr" "purrr" "readr" "tidyr"
[25] "tibble" "tidyverse" "ggplot2" "sf"
[29] "RJSONIO" "stats" "graphics" "grDevices"
[33] "utils" "datasets" "methods" "base"
[[3]]
[1] "MMWRweek" "dagitty" "parallel" "CoxBoost"
[5] "prodlim" "Matrix" "survival" "spatstat"
[9] "rpart" "nlme" "spatstat.data" "ggmap"
[13] "leaflet" "spdep" "spData" "sp"
[17] "pdftools" "data.table" "forcats" "stringr"
[21] "dplyr" "purrr" "readr" "tidyr"
[25] "tibble" "tidyverse" "ggplot2" "sf"
[29] "RJSONIO" "stats" "graphics" "grDevices"
[33] "utils" "datasets" "methods" "base"
[[4]]
[1] "MMWRweek" "dagitty" "parallel" "CoxBoost"
[5] "prodlim" "Matrix" "survival" "spatstat"
[9] "rpart" "nlme" "spatstat.data" "ggmap"
[13] "leaflet" "spdep" "spData" "sp"
[17] "pdftools" "data.table" "forcats" "stringr"
[21] "dplyr" "purrr" "readr" "tidyr"
[25] "tibble" "tidyverse" "ggplot2" "sf"
[29] "RJSONIO" "stats" "graphics" "grDevices"
[33] "utils" "datasets" "methods" "base"
Warning messages:
1: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called ‘dagitty’
2: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called ‘MMWRweek’
```
我理解警告消息,它们是函数中 require
调用的输出。这是我每次调用该函数时的输出,即使已经安装并加载了包。据我所知,这些是全局环境中的包,我不清楚如何防止它们出现。感谢任何帮助。
necessary_packages <- c("DBI", "odbc")
new_packages <- necessary_packages[!(necessary_packages %in% installed.packages()[,"Package"])]
if(seq_along(new_packages) > 0){install.packages(new_packages, dependencies = TRUE)}
lapply(necessary_packages, require, character.only = TRUE)
朋友帮我在library
函数的文档中找到了答案,我应该在提问之前仔细阅读一下:
"Normally library returns (invisibly) the list of attached packages, but TRUE or FALSE if logical.return is TRUE. When called as library() it returns an object of class "libraryIQR",对于库 (help=),class "packageInfo" 之一。"
相应地,我修改了我的功能,只return不管它是否已经加载。
packages_installed <- function(pkg_list){
pkgs <- unlist(pkg_list)
req <- unlist(lapply(pkgs, require, character.only = TRUE,
quietly = TRUE))
not_installed <- pkgs[req == FALSE]
lapply(not_installed, install.packages,
repos = "http://cran.r-project.org")#also add lib.loc later
sapply(pkgs, library, character.only = TRUE,
logical.return = TRUE, warn.conflicts = TRUE)
}
现在参数的输出 package_list
package_list <- list("rNOMADS","adehabitatMA","raster","rgdal","rgeos"); packages_installed(package_list)
读作
rNOMADS adehabitatMA raster rgdal rgeos
TRUE TRUE TRUE TRUE TRUE