Атрибут 'names' должен иметь ту же длину, что и вектор в пакете ExpDes - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь выполнить анализ с использованием пакета ExpDes, однако функция не запускается из-за ошибки:

Error in names(x) <- value : 'names' attribute [5] must be the same length as the vector [3]

    library(ExpDes)

temperature <- c(20,20,20,20,30,30,30,30,40,40,40,40)
    chemicals <- c(0,10,20,30,0,10,20,30,0,10,20,30)
    contaminant_A <- c(9,22,25,28,35,50,57,78,86,94,97,100)
    contaminant_B <- c(0, 0, 3, 3, 4, 5,11,11,13,18,18,21)
    contaminant_C <- c(68,57,53,50,44,38,36,34,31,29,25,24)
    contaminant_D <- c(39,68,35,32,53,69,69,60,35,30,43,36)

    DF <- data.frame(temperature,
                 chemicals,
                 contaminant_A,
                 contaminant_B,
                 contaminant_C,
                 contaminant_D)

    attach(DF)
    fat2.crd(temperature, chemicals, contaminant_A, quali = c(FALSE, FALSE), mcomp = "tukey",
         fac.names = c("Temperature","Chemicals"), sigT = 0.05, sigF = 0.05)

1 Ответ

0 голосов
/ 25 июня 2019

Если вы наберете fat2.crd в консоли, вы увидите исходный код функции. При этом они применяют aov к переданным факторам и переменным ответа. Перед этим они преобразуют факторные переменные в класс factor, затем берут его summary и изменяют имена столбцов. Подводя итог, они пытаются сделать

a1 <- summary(aov(DF$contaminant_A~factor(DF$temperature) * factor(DF$chemicals)))
a1

#                                            Df Sum Sq Mean Sq
#factor(DF$temperature)                       2  10749    5375
#factor(DF$chemicals)                         3    998     333
#factor(DF$temperature):factor(DF$chemicals)  6    279      47

и затем

colnames(a1[[1]]) <- c("DF", "SS", "MS", "Fc", "Pr>Fc")

, что дает

Ошибка в именах (x) <- значение: Атрибут 'names' [5] должен иметь ту же длину, что и вектор [3] </p>

поскольку имеется только 3 столбца и функция передает 5 имен для переименования.

Мы можем написать нашу собственную версию функции, в которой мы не конвертируем класс переданных факторных переменных и используем их как есть

a1 <- summary(aov(DF$contaminant_A~DF$temperature * DF$chemicals))
a1
#                            Df Sum Sq Mean Sq F value   Pr(>F)    
#DF$temperature               1  10731   10731  267.04 1.98e-07 ***
#DF$chemicals                 1    968     968   24.09  0.00118 ** 
#DF$temperature:DF$chemicals  1      6       6    0.14  0.71803    
#Residuals                    8    321      40                     
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1ctor`

и затем измените имена столбцов

colnames(a1[[1]]) <- c("DF", "SS", "MS", "Fc", "Pr>Fc")

, который работает без ошибок, но я не уверен, какие последствия это может иметь в анализе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...