Подтвердить что ты не робот

Загрузить пакет R из символьной строки

Я хочу создать функцию, которая включает загрузку пакета, который я создаю внутри функции. Краткий пример (который не запускается!):

loadMe <- function(name){
    genLib(xxx, libName = name) #make a new library with name "name"
    library(name)               #load the new library...
}

Это не работает! Немного воспроизводимого кода, который иллюстрирует мою основную проблему:

library(ggplot)         #this works fine
load.this <- "ggplot"
library(load.this)      #I want this to load ggplot!

Я знаю, проблема в том, что library() и require() принимают в качестве аргумента имя объекта, которое еще не существует. Я попробовал обернуть свою строку символов с помощью parse(), deparse(), substitute(), expression(), quote() и т.д. И т.д. Все они возвращают ту же проблему:

library(load.this)
# Error in library(loadss) : there is no package called 'loadss'
library(deparse(load.this))
# Error in library(deparse(loadss)) : 'package' must be of length 1

Есть ли способ сделать это?

4b9b3361

Ответ 1

Используйте аргумент character.only

foo <- "ggplot2"
library(foo,character.only=TRUE)

Ответ 2

Вы говорите, что попробовали использовать parse(). Для меня, похоже, работает:

eval(parse(text = 'library(MASS)')[1])