【问题标题】:Use rlang to create a named list programmatically使用 rlang 以编程方式创建命名列表
【发布时间】:2018-10-12 04:36:33
【问题描述】:

来自Constructing lists using tidyeval tools (like `!!` and `:=`),你可以做

a <- "item_name"
b <- "item_value"

list2(!!a := b)

当有多个元素时,我如何逐项完成相同的事情?

a <- c("item_name1","item_name2")
b <- c("item_value1","item_value2")

【问题讨论】:

  • names(b)&lt;-a;as.list(b)

标签: r rlang


【解决方案1】:
structure(as.list(b), names=a)

【讨论】:

    【解决方案2】:

    如果您专门寻找“tidyeval”的做事方式,请考虑以下经验法则:!! 用于单个元素,!!! 是其对多个元素的扩展。

    list2( !!!setNames(b, a) )
    # $item_name1
    # [1] "item_value1"
    #
    # $item_name2
    # [1] "item_value2"
    

    【讨论】:

      【解决方案3】:

      我不完全确定你在问什么。

      这就是你所追求的吗?

      map2(a, b, list2)
      #[[1]]
      #[[1]][[1]]
      #[1] "item_name1"
      #
      #[[1]][[2]]
      #[1] "item_value1"
      #
      #
      #[[2]]
      #[[2]][[1]]
      #[1] "item_name2"
      #
      #[[2]][[2]]
      #[1] "item_value2"
      

      或者这个?

      map2(a, b, ~list2(!!.x := .y))
      #[[1]]
      #[[1]]$item_name1
      #[1] "item_value1"
      #
      #
      #[[2]]
      #[[2]]$item_name2
      #[1] "item_value2"
      

      【讨论】:

        【解决方案4】:

        如果需要设置多个名字,rlang包有set_names函数

        a <- c("item_name1","item_name2")
        b <- c("item_value1","item_value2")
        
        b %>% rlang::as_list() %>% rlang::set_names(a)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-03
          • 1970-01-01
          • 1970-01-01
          • 2015-12-05
          • 2012-09-06
          • 1970-01-01
          相关资源
          最近更新 更多