为列表中的每个元素创建一个新的数据框

Creating a New Data Frame For Each Element in a List

假设我有以下列表“d”:

library(combinat)
d = permn(c("a", "b", "c"))

看起来如下:

[[1]]
[1] "a" "b" "c"

[[2]]
[1] "a" "c" "b"

[[3]]
[1] "c" "a" "b"

[[4]]
[1] "c" "b" "a"

[[5]]
[1] "b" "c" "a"

[[6]]
[1] "b" "a" "c"

是否可以将每个元素转换为新的数据框?

这就是我想要做的:

data_1  = data.frame(col1 = c("a", "b", "c"))
data_2  = data.frame(col1 = c("a", "c", "b"))
data_3  = data.frame(col1 = c("c", "a", "b"))
data_4  = data.frame(col1 = c("c", "b", "a"))
data_5  = data.frame(col1 = c("b", "c", "a"))
data_6  = data.frame(col1 = c("b", "a", "c"))

有人可以告诉我怎么做吗?

谢谢!

您可以 list2env 在制作 data.framesetNames 之后进入 .GlobalEnv

lapply(d, \(x) data.frame(col1=x)) |>
  setNames(paste0('data', seq_along(d))) |>
  list2env(envir=.GlobalEnv)

data1
#   col1
# 1    a
# 2    b
# 3    c

R 版本 < 4.1:

list2env(
  setNames(
    lapply(d, function(x) data.frame(col1=x)), 
    paste0('data', seq_along(d))),
  envir=.GlobalEnv)

一个tidyverse选项:

library(tidyverse)

purrr::map(d, function(x)
  as.data.frame(x) %>% rename("col" = x)) %>%
  set_names(paste0('data_', seq_along(d))) %>%
  list2env(envir = .GlobalEnv)