我正在尝试使用带有 purrr map 的 modelr 中的 permute 函数来计算置换下两类数据的平均值。
如果我尝试从排列的数据集计算线性模型,则该函数的行为与预期的一样,根据 modelr::permute 的示例文件(尽管我在自定义函数内部运行线性模型):
library(tidyverse)
library(modelr)
perms <- permute(mtcars, 1000, mpg)
jlm <- function(df){lm(mpg ~ wt, data = df)}
models3 <- map(perms$perm, jlm)
models3[[1]]
Call: lm(formula = mpg ~ wt, data = df) Coefficients: (Intercept) wt 28.211 -2.524
现在,我只想要该数据集中两个类别的平均值,而不是线性模型。我尝试如下运行。
mean_of_vs <- function(df){ df %>% group_by(vs) %>% summarize(mean(mpg)) %>% spread(vs, `mean(mpg)`) %>% rename(zero = `0`, one = `1`) } models4 <- map(perms$perm, ~mean_of_vs) models4[[1]]
但这只是返回函数方程,而不是函数的输出
function(df){ df %>% group_by(vs) %>% summarize(mean(mpg)) %>% spread(vs, `mean(mpg)`) %>% rename(zero = `0`, one = `1`) }
该方程本身适用于一个简单的数据框。
test <- perms %>% pull(perm) %>% .[[1]] %>% as.data.frame
mean_of_vs(test)
# A tibble: 1 x 2 zero one <dbl> <dbl> 1 16.6 24.5
所以我的问题是,为什么我的自定义函数不返回一堆平均值为 vs = 0 和 vs = 1 的单行数据帧,我将如何让它做到这一点?
谢谢。