【问题标题】:Create a named empty list based on dataframe and column names根据数据框和列名创建一个命名的空列表
【发布时间】:2020-04-20 19:06:19
【问题描述】:

我想创建一个空列表,它采用数据框的名称,并根据数据框的名称在里面包含空元素

我尝试过的 - 不起作用

my_list_function <- function(thedata) {
  list(
    x = map(names(x), ~ .x = list())
  ))
}

我希望能够运行

my_list_function(mtcars)

并获得输出:

期望的输出

list(
  mtcars = list(
    mpg = list(),
    cyl = list(),
    disp = list(),
    hp = list(),
    drat = list(),
    wt = list(),
    qseq = list(),
    vs = list(),
    am = list(),
    gear = list(),
    carb = list()
  )
)

【问题讨论】:

    标签: r list purrr


    【解决方案1】:

    使用purrr:

    library(purrr)
    map(mtcars, ~ list())
    

    如果你想要列表中数据本身的名称,你可以试试这个:

    my_list_function <- function(data) {
      .data <- rlang::enquo(data)
    
      list(map(data, ~ list())) %>% 
        set_names(rlang::as_name(.data))
    }
    
    my_list_function(mtcars)
    

    【讨论】:

      【解决方案2】:

      我们可以使用setNames

      my_list_function <- function(data) {
           nm1 <- deparse(substitute(data))
          setNames(list( setNames(rep(list(list()), length(data)), names(data))), nm1)
            }
      
      my_list_function(mtcars)
      #$mtcars
      #$mtcars$mpg
      #list()
      
      #$mtcars$cyl
      #list()
      
      #$mtcars$disp
      #list()
      
      #$mtcars$hp
      #list()
      # ...
      

      或使用purrr

      library(purrr)
      library(dplyr)
      my_list_function <- function(data) {
      
      
         lst(!! enquo(data) := map(data, ~ list()))
        }
      my_list_function(mtcars)
      #$mtcars
      #$mtcars$mpg
      #list()
      
      #$mtcars$cyl
      #list()
      
      #$mtcars$disp
      #list()
      
      #$mtcars$hp
      #list()
      # ...
      

      【讨论】:

      • purrr 答案中带有“lst”的错字。而且我不知道它是rlang 版本还是什么,但我得到Error: :=` 也只能在准引用参数中使用(我一开始在我的解决方案中使用它,然后它停止了工作)。
      • @Adam 对不起,lsttibbledplyr 中都可以找到。我应该更新它
      • 太棒了。现在工作。很高兴知道,这实际上是我想做的,但最终选择了set_names()
      猜你喜欢
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      相关资源
      最近更新 更多