Применение функции назначения к списку / вектору желаемых имен переменных - PullRequest
0 голосов
/ 04 мая 2018

Скажем, у меня есть вектор v1, содержащий имена переменных, и я хочу присвоить значение (хранящееся в отдельном векторе) каждому из них. Как я могу сделать это без итерации?

v1 <- c("a","b","c")
v2 <- c(1,2,3)

Чего я хочу достичь без цикла:

for (i in 1:3){
  assign(v1[i],v2[i])
}

Мне кажется, что я близок к purrr:map2, но я пробовал разные входные классы, функции и т. Д. И не могу заставить его записать переменные в память.

map2(v1,v2,function(x,y) assign(x,y))

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Если вы действительно хотите поместить их в глобальную среду, вы можете использовать

list2env(setNames(as.list(v2), v1), envir = .GlobalEnv) # no need for assign()

но вместо этого я рекомендую хранить их в списке:

vars <- setNames(as.list(v2), v1)
0 голосов
/ 04 мая 2018

Это назначит переменные в текущую среду. Замените environment() любой средой, которую вы хотите, если это не та среда, в которую вы хотите назначить. junk не используется.

junk <- Map(`assign`, v1, v2, MoreArgs = list(envir = environment()))
a;b;c
## [1] 1
## [1] 2
## [1] 3
0 голосов
/ 04 мая 2018

Вы можете использовать обычный старый Map:

Map(function(x,y) assign(x, y, envir = .GlobalEnv), v1, v2)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...