r - 检查和安装缺失包的函数输出
问题描述
为文字墙道歉。
基于这篇文章和这篇文章,我主要写了一个函数让我在每个R脚本的开头安装一个包列表,而不必经历“调用函数->获取错误消息->安装包”的循环“ 每一次。功能是这样的:
`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)
推荐阅读
- python - For循环到字典理解正确翻译(Python)
- pose-estimation - 如何从热图中计算关键点估计的置信度分数
- angular - Angular Reactive Forms 使用插值在输入上动态生成验证属性
- javascript - 获取 Token Silent 方法在 Angular 9 中无法正常工作
- javascript - 使用 mongoose 从 MongoDB 更新 FrontEnd 上的列表并做出反应
- sql - 如何为使用 jsonb_to_recordset 检索的列设置别名?
- javascript - destripution 文件夹中的 webpack 资产路径是绝对的,因此无法正常工作
- kotlin - 为什么是 !运算符与 Arrow Monad 理解中的 .bind() 相同?
- elasticsearch - 从 Elastic Search 的结果中获取每个坐标的距离
- tkinter - python中的滚动条,窗口中有按钮