2

我有一个数据框,并在数据之间进行了方差分析。在方差分析之后,我想使用其中一个结果列进行计算并使用该mutate()函数创建一个新列。但是,会出现一个错误,表明无法对anova类对象执行此操作:

Error: `x` must be a vector, not a <anova_test/data.frame/rstatix_test> object.

有人可以帮我F + 1使用 ANOVA 结果的 F 列进行计算( )吗?

在此处输入图像描述

library(dplyr)
library(rstatix)

Temperature <- factor(c(rep("cold", times = 4),
                        rep("hot", times = 4)),
                      levels = c("cold", "hot"))

Light <- factor(rep(c(rep("blue", times = 2),
                      rep("yellow", times = 2)),
                    times = 2),
                levels = c("blue", "yellow"))

Result <- c(90.40, 85.20, 21.70, 25.30,
            75.12, 77.36, 6.11, 10.8)

Data <- data.frame(Temperature, Light, Result)

NewColumn <- Data %>%
  anova_test(formula = Result ~ Temperature*Light) %>%
  mutate(New= `F` + 1) #<-------- Not working
4

1 回答 1

2

正如 JKupzig 在评论中提到的,这是一个已知问题,dplyr如下所述:https ://github.com/tidyverse/dplyr/issues/5286 。

该问题是由anova_test()创建带有 classes 和 的输出数据框引起的anova_testdata.frame并且rstatix_test,如果 class 向量中的最后一个元素不是,则mutate()fromdplyr似乎会挂起data.frame。您可以按如下方式验证 anova 输出的类别:

Data %>% anova_test(formula = Result ~ Temperature*Light) %>% class()

[1] "anova_test"   "data.frame"   "rstatix_test"

as_tibble()作为一种解决方法,您可以dplyranova_test(). 这会按顺序将类重置为tbl_dftbldata.frame

Data %>% anova_test(formula = Result ~ Temperature*Light) %>% as_tibble() %>% class()

[1] "tbl_df"     "tbl"        "data.frame"

Data %>%
    anova_test(formula = Result ~ Temperature*Light) %>% 
    as_tibble() %>%
    mutate(New= `F` + 1)

# A tibble: 3 x 8
  Effect              DFn   DFd        F         p `p<.05`   ges     New
  <chr>             <dbl> <dbl>    <dbl>     <dbl> <chr>   <dbl>   <dbl>
1 Temperature           1     4   42.2   0.003     "*"     0.914   43.2 
2 Light                 1     4 1041.    0.0000055 "*"     0.996 1042.  
3 Temperature:Light     1     4    0.725 0.442     ""      0.153    1.72

请注意,此操作会删除类anova_testrstatix_test. 如果这些类很重要,请使用包中的不同解决方法set_class()magrittrmagrittr的依赖项dplyr,因此无需单独安装)。

Data %>%
    anova_test(formula = Result ~ Temperature*Light) %>%
    magrittr::set_class(c("anova_test", "rstatix_test", "data.frame")) %>% 
    class()

[1] "anova_test"   "rstatix_test" "data.frame" 

Data %>%
   anova_test(formula = Result ~ Temperature*Light) %>%
   magrittr::set_class(c("anova_test", "rstatix_test", "data.frame")) %>% 
   mutate(New = `F` + 1)

ANOVA Table (type II tests)

             Effect DFn DFd        F        p p<.05   ges      New
1       Temperature   1   4   42.250 3.00e-03     * 0.914   43.250
2             Light   1   4 1041.366 5.50e-06     * 0.996 1042.366
3 Temperature:Light   1   4    0.725 4.42e-01       0.153    1.725
于 2022-01-05T14:00:40.010 回答