假设我有以下功能

SlowFunction = function(vector){
  return(list(
    mean =mean(vector),
    sd  = sd(vector)
    ))
  }


我想使用dplyr:summarise将结果写入数据框:

iris %>%
  dplyr::group_by(Species) %>%
  dplyr::summarise(
    mean = SlowFunction(Sepal.Length)$mean,
    sd   = SlowFunction(Sepal.Length)$sd
    )


有人建议我通过一次而不是两次调用“ SlowFunction”来做到这一点吗? (在我的代码中,“ SlowFunction”是一个慢速函数,我必须多次调用它。)当然,无需将“ SlowFunction”分成两部分。因此,实际上我想以某种方式在一个数据框中填充数据列的多个列。

最佳答案

一个选项是用于将SlowFunction的输出存储在listdata.frame列中,然后使用unnest

iris %>%
    group_by(Species) %>%
    summarise(res = list(as.data.frame(SlowFunction(Sepal.Length)))) %>%
    unnest()
## A tibble: 3 x 3
#  Species     mean    sd
#  <fct>      <dbl> <dbl>
#1 setosa      5.01 0.352
#2 versicolor  5.94 0.516
#3 virginica   6.59 0.636

08-20 00:42