Я пытаюсь вычислить СИНИЙ для нескольких столбцов, используя lapply и lme4. Имеется 2 повтора 264 линий с информацией о репутации и блоке, а также 4 фенотипа.

Простая функция, которую я использую для извлечения фиксированных эффектов:

blues.rb <- function(traits, dat = ".") {
b<- as.data.frame(fixef(lmer(paste0(traits, "~ 0 + Lines + (1|rep) + 
(1|rep:block)"), data = dat)))
}

Затем это запускается с использованием:

pheno15$Lines <- as.factor(pheno15$Lines)
pheno15$rep <- as.factor(pheno15$rep)
pheno15$block <- as.factor(pheno15$block)

effectvars <- names(pheno15) %in% 
             c("block", "rep", "Lines", "year", "column", "row", "experiment_id")
traits <- colnames(pheno15[ , !effectvars])

blues2015<- as.data.frame(lapply(traits, blues.rb, dat = pheno15))
names(blues2015) <- traits

Я получаю следующее сообщение об ошибке:

Error in (function (..., row.names = NULL, check.rows = FALSE, 
check.names = TRUE,  : 
arguments imply differing number of rows: 264, 262

Я знаю, что это вызвано отсутствием значений в исходных данных, но я надеялся на простое исправление?

Я пытался использовать

fixef(object, add.dropped = TRUE)

Но это не меняет результатов.

Вот ссылка на данные:

2
MCal 23 Апр 2018 в 19:03

1 ответ

Лучший ответ

Вот решение tidyverse.

Сохраняйте результаты в виде списка, пока не привязывайтесь к data.frame:

blues2015<- lapply(traits, blues.rb, dat = pheno15)

Затем добавьте соответствующие имена столбцов с помощью map2(), аналогичные mapply(), и вставьте имена строк как правильные столбцы:

library(tidyverse)
blues2015 <- map2(blues2015, traits, ~ set_names(..1, ..2) %>%
                      rownames_to_column(var = "Line")) %>%
    reduce(full_join)

И закончите с reduce(full_join), чтобы сохранить все строки для Lines и избежать этой ошибки, потому что MOIST имеет два пропущенных значения.

head(blues2015)

    Line     GRWT  MOIST      PTHT      HDDT
1 Lines1 472.5796  9.135  86.55540  2.023394
2 Lines2 255.5317  8.770 107.42463 12.527692
3 Lines3 475.1308  8.965  95.47639 11.996619
4 Lines4 773.0695  8.995  89.57909  8.003491
5 Lines5 740.0130  9.200  89.55191  1.984823
6 Lines6 607.8674 10.335  91.55662 16.001055
1
Nate 23 Апр 2018 в 17:25