R 将模型映射到置换数据集有时会返回模型方程,而不是模型输出

R 将模型映射到置换数据集有时会返回模型方程,而不是模型输出,r,purrr,modelr,R,Purrr,Modelr,我试图使用modelr中的permute函数和purrr映射来计算置换下两类数据的平均值 根据modelr::permute的示例文件(尽管我在自定义函数中运行线性模型),如果我试图从排列的数据集计算线性模型,则函数的行为与预期的一样: 现在,我不需要线性模型,我只需要数据集中两个类别的平均值。我试着按如下方式跑步 该方程在一个简单的数据框架上自行工作 test <- perms %>% pull(perm) %>% .[[1]] %>% as.data.frame m

我试图使用modelr中的permute函数和purrr映射来计算置换下两类数据的平均值

根据modelr::permute的示例文件(尽管我在自定义函数中运行线性模型),如果我试图从排列的数据集计算线性模型,则函数的行为与预期的一样:

现在,我不需要线性模型,我只需要数据集中两个类别的平均值。我试着按如下方式跑步

该方程在一个简单的数据框架上自行工作

test <- perms %>% pull(perm) %>% .[[1]] %>% as.data.frame

mean_of_vs(test)
> perms
# A tibble: 1,000 x 2
   perm              .id
   <list>            <chr>
 1 <S3: permutation> 0001
 2 <S3: permutation> 0002
 3 <S3: permutation> 0003
 4 <S3: permutation> 0004
 5 <S3: permutation> 0005
 6 <S3: permutation> 0006
 7 <S3: permutation> 0007
 8 <S3: permutation> 0008
 9 <S3: permutation> 0009
10 <S3: permutation> 0010
# ... with 990 more rows
test%pull(perm)%%>%.[1]]%%>%as.data.frame
平均值(测试)
#一个tible:1 x 2
01
1  16.6  24.5
所以我的问题是,为什么我的自定义函数不返回一组平均值为vs=0和vs=1的单行数据帧,我如何让它这样做


谢谢。

Permute返回类型
,而不是数据帧

test <- perms %>% pull(perm) %>% .[[1]] %>% as.data.frame

mean_of_vs(test)
> perms
# A tibble: 1,000 x 2
   perm              .id
   <list>            <chr>
 1 <S3: permutation> 0001
 2 <S3: permutation> 0002
 3 <S3: permutation> 0003
 4 <S3: permutation> 0004
 5 <S3: permutation> 0005
 6 <S3: permutation> 0006
 7 <S3: permutation> 0007
 8 <S3: permutation> 0008
 9 <S3: permutation> 0009
10 <S3: permutation> 0010
# ... with 990 more rows
因此,要执行所需操作,只需在
mean\u of_vs()
函数的第一步中访问
data
元素:

library(tidyverse) 
library(modelr)

perms <- permute(mtcars,  1000, mpg)
jlm <- function(df){lm(mpg ~ wt, data = df)}
models3 <- map(perms$perm, jlm)
models3[[1]]
mean_of_vs <- function(df) {
  df$data %>% 
    group_by(vs) %>% 
    summarize(mean(mpg)) %>% 
    spread(vs, `mean(mpg)`) %>%
    rename(zero = `0`, one = `1`)
}

分组依据(vs)%>%
汇总(平均(mpg))%>%
价差(vs,`平均值(mpg)`)%>%
重命名(0=`0`,1=`1`)
}
现在事情如预期的那样进行:

> models4 <- map(perms$perm, mean_of_vs)
> models4[[1]]
# A tibble: 1 x 2
   zero   one
  <dbl> <dbl>
1  16.6  24.6
>models4 models4[[1]]
#一个tibble:1x2
01
1  16.6  24.6

Permute返回类型
,而不是数据帧

test <- perms %>% pull(perm) %>% .[[1]] %>% as.data.frame

mean_of_vs(test)
> perms
# A tibble: 1,000 x 2
   perm              .id
   <list>            <chr>
 1 <S3: permutation> 0001
 2 <S3: permutation> 0002
 3 <S3: permutation> 0003
 4 <S3: permutation> 0004
 5 <S3: permutation> 0005
 6 <S3: permutation> 0006
 7 <S3: permutation> 0007
 8 <S3: permutation> 0008
 9 <S3: permutation> 0009
10 <S3: permutation> 0010
# ... with 990 more rows
因此,要执行所需操作,只需在
mean\u of_vs()
函数的第一步中访问
data
元素:

library(tidyverse) 
library(modelr)

perms <- permute(mtcars,  1000, mpg)
jlm <- function(df){lm(mpg ~ wt, data = df)}
models3 <- map(perms$perm, jlm)
models3[[1]]
mean_of_vs <- function(df) {
  df$data %>% 
    group_by(vs) %>% 
    summarize(mean(mpg)) %>% 
    spread(vs, `mean(mpg)`) %>%
    rename(zero = `0`, one = `1`)
}

分组依据(vs)%>%
汇总(平均(mpg))%>%
价差(vs,`平均值(mpg)`)%>%
重命名(0=`0`,1=`1`)
}
现在事情如预期的那样进行:

> models4 <- map(perms$perm, mean_of_vs)
> models4[[1]]
# A tibble: 1 x 2
   zero   one
  <dbl> <dbl>
1  16.6  24.6
>models4 models4[[1]]
#一个tibble:1x2
01
1  16.6  24.6
很高兴认识你

modeler::permute
生成其类为“permutation”的数据

> class(perms[[1]][1][[1]])

[1] "permutation"

置换
类有3个属性

数据 此变量中的数据

柱 您排列的列

idx 指示已选择哪些行的索引

我认为
permutation
只需要一些公式(比如
lm
。我不确定公式列表)

所以,如果您想使用函数,您必须转换为data.frame/data.table/tibble,如下所示

mean_of_vs <- function(df){
   df %>%as.data.frame() %>% group_by(vs) %>% summarize(mean(mpg)) %>% spread(vs, `mean(mpg)`) %>%
     rename(zero = `0`, one = `1`)
}
然后你就会得到结果


.....

[[97]]

# A tibble: 1 x 2
   zero   one

  <dbl> <dbl>
1  21.4  18.4




[[98]]

# A tibble: 1 x 2
   zero   one

  <dbl> <dbl>
1  20.4  19.7
.....


.....
[[97]]
#一个tibble:1x2
01
1  21.4  18.4
[[98]]
#一个tibble:1x2
01
1  20.4  19.7
.....
很高兴认识你

modeler::permute
生成其类为“permutation”的数据

> class(perms[[1]][1][[1]])

[1] "permutation"

置换
类有3个属性

数据 此变量中的数据

柱 您排列的列

idx 指示已选择哪些行的索引

我认为
permutation
只需要一些公式(比如
lm
。我不确定公式列表)

所以,如果您想使用函数,您必须转换为data.frame/data.table/tibble,如下所示

mean_of_vs <- function(df){
   df %>%as.data.frame() %>% group_by(vs) %>% summarize(mean(mpg)) %>% spread(vs, `mean(mpg)`) %>%
     rename(zero = `0`, one = `1`)
}
然后你就会得到结果


.....

[[97]]

# A tibble: 1 x 2
   zero   one

  <dbl> <dbl>
1  21.4  18.4




[[98]]

# A tibble: 1 x 2
   zero   one

  <dbl> <dbl>
1  20.4  19.7
.....


.....
[[97]]
#一个tibble:1x2
01
1  21.4  18.4
[[98]]
#一个tibble:1x2
01
1  20.4  19.7
.....