R 用于检查和安装缺失软件包的函数的输出

R 用于检查和安装缺失软件包的函数的输出,r,install.packages,R,Install.packages,为文字墙道歉 基于此,我主要编写了一个函数,让我在每个R脚本开始时安装一个包列表,而不必每次都经历“调用函数->获取错误消息->安装包”的循环。其功能是: `packages_installed <- function(pkg_list){ pkgs <- unlist(pkg_list) req <- unlist(lapply(pkgs, require, character.only = TRUE)) not_install

为文字墙道歉

基于此,我主要编写了一个函数,让我在每个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)
`

我理解从函数中的
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返回(不可见)附加包的列表,但如果logical.return为TRUE,则返回TRUE或FALSE。当调用为library()时,它返回类“LibraryQR”的对象,对于library(help=),则返回类“packageInfo”的对象

因此,我修改了我的函数,只返回它是否已加载

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)

packages\u安装非常感谢,我一开始也有类似的功能。然后我变得贪婪,想在同一步骤中加载已经安装的包。当我没有库步骤时,上面的函数工作得非常好。我想知道的是我上面显示的输出为什么会出现。并不是说这是错的,只是出乎意料,有点不必要。如果你对此有任何想法,请告诉我。
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)
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)