使用整洁原则从 R 中的列表列表中提取元素

Pull elements from a list of lists in R using tidy principles

我有一个列表列表,我希望从每个列表中提取特定元素并将结果存储在数据框中。

对于每个 VendorNum,我希望提取 nMAD.conformity。在下面的例子中有 4 VendorNum.

列表列表可以通过运行以下块获得:

result <- top_vendors %>% 
  split(.$VendorNum) %>% 
  map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount))

使用 map_dfrextract 我可以从每个列表中提取一个元素,但是当我添加其他元素时 运行 会出错。

这是我正在使用的代表:

library(dplyr)
library(purrr)
library(benford.analysis)

data(corporate.payment)

# FIND VENDORS WITH A SIGNIFICANT NUMBER OF ROWS
vendor_records <- corporate.payment %>% 
  group_by(VendorNum) %>% 
  summarise(records = n()) %>% 
  arrange(desc(records))

# FILTER FOR THESE VENDORS
top_vendors <- corporate.payment %>% 
  filter(VendorNum %in% c('3630','6661','2001','4984'))

result <- top_vendors %>% 
  split(.$VendorNum) %>% 
  map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount)) %>% 
  map_dfr(magrittr::extract, c("MAD.conformity"), .id = "VendorNum")

当我将元素向量添加到提取函数时,出现以下错误:

map_dfr(magrittr::extract, c("MAD.conformity","n"), .id = "VendorNum")

Error:
! Column names `MAD.conformity`, `MAD.conformity`, and `MAD.conformity` must not be duplicated.
Use .name_repair to specify repair.
Caused by error in `stop_vctrs()`:
! Names must be unique.
x These names are duplicated:
  * "MAD.conformity" at locations 1, 2, 3, and 4.
Run `rlang::last_error()` to see where the error occurred.
Warning message:
Outer names are only allowed for unnamed scalar atomic inputs

如果你能帮我弄清楚如何将额外的元素提取到数据框中,我将不胜感激。

to_extract <- list(MAD.conformity = c('MAD.conformity'),
                   n = c('info', 'n')) 
top_vendors %>% 
   split(.$VendorNum) %>% 
   map(~ benford(number.of.digits = 1, discrete = TRUE, sign = "positive", data = .x$Amount)) %>% 
   map_df(~map(to_extract, ~.y[[.x]], .x), .id = 'VendorNum')

# A tibble: 4 x 3
  VendorNum MAD.conformity            n
  <chr>     <chr>                 <int>
1 2001      Nonconformity          4735
2 3630      Acceptable conformity 13361
3 4984      Acceptable conformity  4311
4 6661      Nonconformity          4133