[英]Output of function to check for and install missing packages
為文字牆道歉。
Based on this post and this post , primarily, I wrote a function to let me install a list of packages at the start of every R script, without having to go through the cycle of "Call function -> get error message -> install package “ 每一次。 function 是這樣的:
`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)
`
但是,當我嘗試運行它時,output 是已安裝的軟件包列表。 例如,這是我的試運行:
```package_list <- c("dagitty","MMWRweek","ggplot2","parallel")```
```packages_installed(package_list)```
這是我的 output:
```
[[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’
```
我了解警告消息,它們是來自 function 中的require
調用的 output。 這是 output 每次我調用 function,即使 package 已經安裝和加載。 據我所知,這些是全球環境中的包,我不清楚如何防止它們出現。 任何幫助表示贊賞。
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
function 的文檔中找到了答案,在問這個問題之前我應該更仔細地閱讀:
“通常庫返回(不可見)附加包的列表,但如果logical.return 為TRUE,則返回TRUE 或FALSE。當調用庫()時,它返回object 的class “libraryIQR”,對於庫(幫助=),其中之一class “packageInfo”。
因此,我修改了我的 function 只返回它是否已加載。
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
的 output
package_list <- list("rNOMADS","adehabitatMA","raster","rgdal","rgeos"); packages_installed(package_list)
讀作
rNOMADS adehabitatMA raster rgdal rgeos TRUE TRUE TRUE TRUE TRUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.