Загрузка нескольких библиотек одновременно - PullRequest
1 голос
/ 06 марта 2020

Я пытаюсь написать функцию для загрузки нескольких библиотек одновременно. Через другие форумы и темы я обнаружил, что это работает:

read_library <- function(...) {
  x <- c(...)
  invisible(lapply(x, library, character.only = TRUE))
}

Однако, это заставляет меня писать свои библиотеки между "", то есть:

read_library("tidyverse",
         "readr",
         "infer",
         "modelr",
         "statip",
         "knitr",
         "rmdformats")

Что я хотел бы избежать. Есть ли что-нибудь, что я мог бы добавить к своей функции, которая устранит эту первую мировую проблему?

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Другим способом может быть использование alist с eval и substitute, как показано ниже:

read_library <- function(...) {
    obj <- eval(substitute(alist(...)))
    #print(obj)
    return(invisible(lapply(obj, function(x)library(toString(x), character.only=TRUE))))
}

read_library(gtools, ggplot2, tidyverse)

alist обрабатывает свои аргументы так, как если бы они описывали аргументы функции. Таким образом, значения не оцениваются вместе с замещением, которое возвращает не оцененное выражение. Получив выражение, мы используем eval для получения списка объектов с именем класса, чтобы мы могли проанализировать его как строку в lapply.

2 голосов
/ 06 марта 2020

Вы можете использовать substitute с list, например:

read_library <- function(...) {
     invisible(lapply(substitute(list(...))[-1], function(x) 
                       library(deparse(x), character.only = TRUE)))
}

read_library(tidyverse,
             readr,
             infer,
             modelr,
             knitr, 
             scales)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...