Подмножество наборов данных в список - PullRequest
0 голосов
/ 23 июня 2018

Я новичок в R.Я часами пытался выяснить это и искать в Google и в SO, но не могу найти ничего, что именно то, что я ищу.Надеюсь, вы можете помочь?

У меня есть набор данных, который выглядит следующим образом:

Site(factor)    Species           Date               Mass       GDD
1               cockerelli      0017-03-14           2.73       252.1
2               doddsii         0017-01-12           3.73       583.4
4               cockerelli      0017-03-14           2.71       385.4
4               doddsii         0018-05-16           2.22       783.2
1               infrequens      0018-05-16           2.89       583.0
etc.

Я разделяю () свой фрейм данных на список фреймов данных, которые затем я могу передать в функции apply ().

splitdata = split(data, paste(data$Species,data$Site))

Однако, когда я использую такой код, как:

grmodel = lapply(splitdata, function(x){
  grmodel = aov(x$Mass~x$GDD)
  print(summary(grmodel))
 })

, я получаю огромный список сводок ANOVA (например, приведенных ниже), но я не знаю, какие виды исайт, к которому они принадлежат.

          Df   Sum Sq   Mean Sq F value Pr(>F)
 x$GDD        1 0.000022 0.0000216   0.044  0.838
 Residuals    9 0.004396 0.0004884               
 1 observation deleted due to missingness
           Df    Sum Sq   Mean Sq F value Pr(>F)
 x$GDD        1 0.0002526 0.0002526    0.65  0.451
 Residuals    6 0.0023319 0.0003887               
 1 observation deleted due to missingness

Мне было интересно, знает ли кто-нибудь, как изменить код, чтобы сказать мне, к какому виду и месту относится таблица ANOVA?Я нашел некоторые ответы, в которых говорится о paste () и других функциях, но ничего из того, что я пробовал, не работает.

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Имена результата split являются значениями второго аргумента, приведенного к character -классу, и lapply сохраняет эти имена, поэтому вам не нужно добавлять какие-либо имена обратно, а просто смотреть на :

 names(grmodel)

Возможно, вы хотите сделать это для вывода:

 for( i in names(grmodel) ){ cat(i);
                              cat( : : :\n");
                               print(grmodel[[i]]);
                                cat("\n\n")}

.... которая просто печатает имена и интервалы для каждого элемента в списке grmodels.

0 голосов
/ 23 июня 2018

Насколько я могу судить, имена должны быть видны, я не уверен, что именно вы видите, но, возможно, репрекс будет полезен.

Вы также можете попробовать использовать tidy::broom длясмотри яснее:

lapply(split(iris,iris$Species),
       function(x) aov(Petal.Length ~ Petal.Width,x))

# $`setosa`
# Call:
#   aov(formula = Petal.Length ~ Petal.Width, data = x)
# 
# Terms:
#   Petal.Width Residuals
# Sum of Squares    0.1625262 1.3152738
# Deg. of Freedom           1        48
# 
# Residual standard error: 0.1655341
# Estimated effects may be unbalanced
# 
# $versicolor
# Call:
#   aov(formula = Petal.Length ~ Petal.Width, data = x)
# 
# Terms:
#   Petal.Width Residuals
# Sum of Squares     6.695921  4.124079
# Deg. of Freedom           1        48
# 
# Residual standard error: 0.2931183
# Estimated effects may be unbalanced
# 
# $virginica
# Call:
#   aov(formula = Petal.Length ~ Petal.Width, data = x)
# 
# Terms:
#   Petal.Width Residuals
# Sum of Squares     1.548503 13.376297
# Deg. of Freedom           1        48
# 
# Residual standard error: 0.5278947
# Estimated effects may be unbalanced

С tidy::broom:

lapply(split(iris,iris$Species),
       function(x) aov(Petal.Length ~ Petal.Width,x) %>% broom::tidy())

# $`setosa`
#          term df     sumsq     meansq statistic    p.value
# 1 Petal.Width  1 0.1625262 0.16252620   5.93128 0.01863892
# 2   Residuals 48 1.3152738 0.02740154        NA         NA
# 
# $versicolor
#          term df    sumsq     meansq statistic      p.value
# 1 Petal.Width  1 6.695921 6.69592109  77.93357 1.271916e-11
# 2   Residuals 48 4.124079 0.08591831        NA           NA
# 
# $virginica
#          term df     sumsq    meansq statistic    p.value
# 1 Petal.Width  1  1.548503 1.5485033  5.556707 0.02253577
# 2   Residuals 48 13.376297 0.2786728        NA         NA
...