编写dplyr函数以传递给group_map

时间:2019-05-16 12:25:34

标签: r dplyr

有问题的问题是将函数f应用于每个小标题。这是一种更简单的方法,但是我想使用group_map()函数来解决问题。

使用的数据 dplyr 软件包中的星际争霸。

我想要的是获得考虑到变量 gender species 的分组小标题的 height 变量的平均值。我知道通过执行以下操作可以轻松解决该问题:

starwars %>% group_by(gender, species) %>% 
  summarise(mean = mean(height, na.rm = TRUE))

但是,我的愿望是在函数中实现summarise(mean = mean(height, na.rm = TRUE))并发送给group_map()

我试图创建一个f()函数,该函数获得data参数,该参数是具有先前定义的组的小对象。 f()函数的第二个参数为...,这样我就可以将感兴趣的变量从data传递到f()

f <- function(dados, ...){
  dados %>% summarise(mean = mean(..., na.rm = TRUE))
}

starwars %>% group_by(gender, species) %>% 
  group_map(.tbl = ., .f = ~f(dados = .x), height) 

1 个答案:

答案 0 :(得分:0)

解决方案

func_1 <- function(dados, var, ...){

  var_interesse <- enquo(var)
  dots <- enquos(...)

  # Could be attributed direct reference ...
  dados %>% group_by(!!!dots) %>% 
    summarise(media = mean(x = !!var_interesse, na.rm = TRUE))
}

starwars %>% func_1(var = height, gender, species)

func_2 <- function(dados, var){

  var_interesse <- enquo(var)
  #dots <- enquos(...)

  dados %>%  summarise(media = mean(x = !!var_interesse, na.rm = TRUE))
}

agrupamento <- starwars %>% group_by(gender, species)

agrupamento %>% 
  group_map(.tbl = ., .f = ~func_2(dados = .x, var = height))