根据数据框和列名称创建命名的空列表

时间:2020-04-20 19:06:19

标签: r list purrr

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

我尝试过的-不起作用

import json

with open('file1.json','r') as a:
    data1 = a.read()
obj1 = json.loads(data1)

with open('file2.json','r') as a:
    data2 = a.read()
obj2 = json.loads(data2)

count = 0
for i in obj1:
    a = obj2[count]
    if i["r_id"] != a["id"]:
        print(i)
    count = count + 1

我希望能够运行

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

并获得输出:

所需的输出

my_list_function(mtcars)

2 个答案:

答案 0 :(得分:3)

使用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)

答案 1 :(得分:1)

我们可以使用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()
# ...