【问题标题】:Applying the assign function over a list/vector of desired variable names在所需变量名称的列表/向量上应用分配函数
【发布时间】:2018-05-04 13:33:55
【问题描述】:

假设我有一个包含变量名称的向量 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))

【问题讨论】:

    标签: r


    【解决方案1】:

    如果你真的想把它们放在全局环境中,你可以使用

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

    但我建议将它们保存在一个列表中:

    vars <- setNames(as.list(v2), v1)
    

    【讨论】:

      【解决方案2】:

      你可以使用普通的旧Map:

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

      关键是如果你想在你的函数之外使用和查看这些变量,你需要指定分配它们的环境。在这种情况下我选择了全局环境。

      【讨论】:

        【解决方案3】:

        这会将变量分配到当前环境中。将environment() 替换为您想要的任何环境,如果那不是您想要分配的环境。 junk 未使用。

        junk <- Map(`assign`, v1, v2, MoreArgs = list(envir = environment()))
        a;b;c
        ## [1] 1
        ## [1] 2
        ## [1] 3
        

        【讨论】:

          猜你喜欢
          • 2012-07-31
          • 2014-11-03
          • 2015-05-14
          • 2020-09-13
          • 2017-09-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-07
          相关资源
          最近更新 更多