r - 如何在 map2 函数 (purrr) 中对列进行子集化,以便向量长度一致?
问题描述
如何在列的子集上使用该map2
函数(在purrr
包中)而不会出现“映射向量必须具有一致的长度”的错误?子集列的数量等于另一个向量的长度。
这是我的数据:
library(tidyverse)
library(rstatix)
df <- tibble::tribble(
~id, ~edge, ~trt, ~nl, ~lm, ~md, ~c, ~mgg, ~mgcm, ~p, ~sp, ~ap, ~la, ~lacm, ~lacmd,
1L, "S", "C", 1.802500944, -1.126394361, 1.747757193, -0.302911966, 2.942376992, 1.01978392, 1.603508872, 1166.214587, 1.104182097, 3.630403855, 0.925433649, 2.083967271,
2L, "S", "T", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
3L, "D", "C", 1.59505822, -1.554475881, 1.173922711, -0.340665184, 1.854642163, 0.787036727, 1.40878277, 663.125567, 0.898799413, 3.332281129, 0.803131628, 1.841247752,
4L, "D", "T", 1.342572531, -2.21548947, 0.961702527, -0.331617331, 1.645569808, 0.750246559, 0.67441638, 63.63830862, 0.542966439, 2.416127169, 0.574963833, 1.529239129,
5L, "S", "C", 1.802500944, -0.165110402, 2.162768585, -0.285160482, 3.136984959, 1.093832043, 2.209960854, 495.84715, 1.164570199, 4.799142774, 0.994423991, 2.034565573,
6L, "S", "T", 2.141481291, 0.250369615, 2.439863935, -0.218925863, 3.358891011, 1.163094493, 2.30563155, 910.5631088, 1.198833277, 5.219802305, 1.097357732, 2.149000371
)
head(df)
#> # A tibble: 6 x 15
#> id edge trt nl lm md c mgg mgcm p sp ap
#> <int> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 S C 1.80 -1.13 1.75 -0.303 2.94 1.02 1.60 1166. 1.10
#> 2 2 S T NA NA NA NA NA NA NA NA NA
#> 3 3 D C 1.60 -1.55 1.17 -0.341 1.85 0.787 1.41 663. 0.899
#> 4 4 D T 1.34 -2.22 0.962 -0.332 1.65 0.750 0.674 63.6 0.543
#> 5 5 S C 1.80 -0.165 2.16 -0.285 3.14 1.09 2.21 496. 1.16
#> 6 6 S T 2.14 0.250 2.44 -0.219 3.36 1.16 2.31 911. 1.20
#> # ... with 3 more variables: la <dbl>, lacm <dbl>, lacmd <dbl>
我已成功运行该map
函数以创建 12 个模型的列表(我们称其为“models_1”):
models_1 <- map(df[,4:15], ~(lm(.x ~df$edge*df$trt)))
现在,我想使用map2
创建第二组模型来引用我创建的第一组模型。我不断收到“映射向量必须具有一致的长度”的错误,即使我调用的列数map2
等于“models_1”中的模型数:
sim <- df %>%
group_by(edge) %>%
map2(df[, 4:15], models_1, ~(anova_test(.x~ df$trt, error = .y, type = 3)))
我收到以下错误:
Error: Mapped vectors must have consistent lengths:
* `.x` has length 15
* `.y` has length 12
这是我想做的一个工作示例(这仅适用于一个模型,但我有 12 个以上,所以如果可能的话,我想使其自动化):
model <- lm(nl ~ edge*trt, data = df)
df %>%
group_by(edge) %>%
anova_test(nl ~ trt, error = model, type = 3)
由reprex 包(v0.3.0)于 2020-05-19 创建
解决方案
这是您或多或少想做的事情吗?
library(tidyverse)
library(rstatix)
df <- tibble::tribble(
~id, ~edge, ~trt, ~nl, ~lm, ~md, ~c, ~mgg, ~mgcm, ~p, ~sp, ~ap, ~la, ~lacm, ~lacmd,
1L, "S", "C", 1.802500944, -1.126394361, 1.747757193, -0.302911966, 2.942376992, 1.01978392, 1.603508872, 1166.214587, 1.104182097, 3.630403855, 0.925433649, 2.083967271,
2L, "S", "T", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
3L, "D", "C", 1.59505822, -1.554475881, 1.173922711, -0.340665184, 1.854642163, 0.787036727, 1.40878277, 663.125567, 0.898799413, 3.332281129, 0.803131628, 1.841247752,
4L, "D", "T", 1.342572531, -2.21548947, 0.961702527, -0.331617331, 1.645569808, 0.750246559, 0.67441638, 63.63830862, 0.542966439, 2.416127169, 0.574963833, 1.529239129,
5L, "S", "C", 1.802500944, -0.165110402, 2.162768585, -0.285160482, 3.136984959, 1.093832043, 2.209960854, 495.84715, 1.164570199, 4.799142774, 0.994423991, 2.034565573,
6L, "S", "T", 2.141481291, 0.250369615, 2.439863935, -0.218925863, 3.358891011, 1.163094493, 2.30563155, 910.5631088, 1.198833277, 5.219802305, 1.097357732, 2.149000371
)
models_1 <- map(df[,4:15], ~ (lm(.x ~ edge * trt, data = df)))
models_2 <- map(df[,4:15], ~ (lm(.x ~ trt, data = df)))
purrr::map2(models_2, models_1, ~ anova_test(.x, error = .y, type = 3))
#> $nl
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 2.929636e+28 3.72e-15 * 1
#>
#> $lm
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 0.003 0.965 0.003
#>
#> $md
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 0.000496 0.986 0.000496
#>
#> $c
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 8.964 0.205 0.9
#>
#> $mgg
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 1.286 0.46 0.562
#>
#> $mgcm
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 0.046 0.866 0.044
#>
#> $p
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 0.41 0.637 0.291
#>
#> $sp
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 0.443 0.626 0.307
#>
#> $ap
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 22.512 0.132 0.957
#>
#> $la
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 0.019 0.914 0.018
#>
#> $lacm
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 2.578 0.355 0.721
#>
#> $lacmd
#> ANOVA Table (type III tests)
#>
#> Effect DFn DFd F p p<.05 ges
#> 1 trt 1 1 21.387 0.136 0.955
推荐阅读
- python - Python调整文件夹中所有图像的大小
- google-cloud-platform - Terraform google_proejct_iam_member 给出错误 400:策略成员必须采用“
: “。, 错误的请求 - html - 为什么我的 SVG 元素没有正确遵循它的路径?
- python - python中的多个文件下载和进度条更新
- java - Eclipse - RCP 应用程序看不到/识别我的插件
- java - 收到错误提示我的 if 语句总是错误的,我需要做什么?
- android - Android - 在 android 库中显示图像
- json - 需要帮助来反序列化嵌套的 json 响应
- java - 从服务器端加载 url 时出现 401 错误
- python-3.x - 为什么我在代码中定义的全局变量中出现 NameError?