purrr::map_df 嵌套 data.frame

purrr::map_df with nested data.frame

我想遍历一系列数据帧并对它们应用相同的函数。

我正在尝试使用 tidyr::nestpurrr::map_df。这是我想要实现的那种事情的代表。

data(iris)
library(purrr)
library(tidyr)

iris_df <- as.data.frame(iris)
my_var <- 2

my_fun <- function(df) {
  sum_df <- sum(df) + my_var
}

iris_df %>% group_by(Species) %>% nest() %>% map_df(.$data, my_fun)
# Error: Index 1 must have length 1

我做错了什么?有不同的方法吗?

编辑: 澄清我想要的输出。针对包含输出的新列 eg

|Species|Data|my_function_output|
|:------|:---|:-----------------|
|setosa |<tibble>|509.1         |

问题是 nest() 给你一个 data.frame,其中有一列 data,它是 data.frame 的列表。您需要 mapsapply 覆盖 nest() 输出的 data 列,而不是整个 nest 输出。我使用 sapply,但您也可以使用 map_dbl。如果您使用 map,您将得到 list 输出,而 map_df 将不起作用,因为它需要命名输入。

iris_df %>% 
  group_by(Species) %>% 
  nest() %>% 
  mutate(my_fun_out = sapply(data, my_fun))

# A tibble: 3 x 3
  Species    data              my_fun_out
  <fct>      <list>                 <dbl>
1 setosa     <tibble [50 x 4]>        509
2 versicolor <tibble [50 x 4]>        717
3 virginica  <tibble [50 x 4]>        859