Я хочу создать пустой список, который принимает имя информационного кадра и имеет пустые элементы внутри на основе имени информационного кадра

То, что я пробовал - не работает

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()
  )
)
2
MayaGans 20 Апр 2020 в 22:06

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()
# ...
1
akrun 21 Апр 2020 в 18:47

Используя 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)
3
Adam 20 Апр 2020 в 19:21