Загрузить пакет R из строки символов - PullRequest
30 голосов
/ 09 июня 2011

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

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

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

Ответы [ 2 ]

43 голосов
/ 09 июня 2011

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

foo <- "ggplot2"
library(foo,character.only=TRUE)
0 голосов
/ 09 июня 2011

Вы говорите, что пытались использовать parse().Кажется, мне подходит следующее:

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