Векторизация функции назначения и создание объектов в глобальной среде - PullRequest
0 голосов
/ 01 июня 2018

Я хотел бы векторизовать функцию assign и создать набор аргументов, отражающих предоставленный именованный вектор, который будет непосредственно доступен в .GlobalEnv.

Код

vec_args <- c(arg1 = 1,
              arg2 = 2,
              arg3 =  3)

Vectorize(assign)(x = names(vec_args),
                  value = vec_args,
                  envir = globalenv())

Ошибка

Ошибка в точках [[3L]] [[1L]]: неверные аргументы для подстановки среды

Желаемые результаты

ag1 <- 1; arg2 <- 2; arg3 <- 3; ls()
# [1] "ag1"        "arg2"       "arg3"       "vec_args"

или через assign:

По сути, я хотел бы повторить вызов:

assign(x = "arg1", value = vec_args[1], envir = globalenv())

для каждого элемента вектора и использовать имена векторов для создания имен в .GlobalEnv.

1 Ответ

0 голосов
/ 01 июня 2018

Эта функция уже доступна через list2env:

Из с именем 'list x' создайте «среду», содержащую все компоненты списка в виде объектов, или «multi-assign »из« x »в уже существующую среду.

list2env(as.list(vec_args), envir = globalenv())
ls()
# [1] "arg1"     "arg2"     "arg3"     "vec_args"

Будет работать что-то вроде следующего:

rm(list = ls())
vassign <- Vectorize(assign, c("x", "value"))
vec_args <- c(arg1 = 1, arg2 = 2, arg3 = 3)
vassign(names(vec_args), vec_args, envir = globalenv())
ls()
# [1] "arg1"     "arg2"     "arg3"     "vassign"  "vec_args"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...