【发布时间】:2019-05-15 21:24:16
【问题描述】:
我正在尝试使用带有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 的单行数据帧,我该如何让它做到这一点?
谢谢。
【问题讨论】: