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

После выполнения повторного измерения ANOVA и присвоения имени выходу

RM_test <- ezANOVA(data=test_data, dv=var_test, wid = .(subject),
within = .(water_year), type = 3)

Я посмотрел на внутреннюю структуру названного объекта, используяstr(RM_test) и получил следующее:

List of 3
$ ANOVA                        :List of 3
..$ ANOVA                        :'data.frame': 1 obs. of  7 variables:
.. ..$ Effect: chr "water_year"
.. ..$ DFn   : num 2
.. ..$ DFd   : num 22
.. ..$ F     : num 26.8
.. ..$ p     : num 1.26e-06
.. ..$ p<.05 : chr "*"
.. ..$ ges   : num 0.531
..$ Mauchly's Test for Sphericity:'data.frame': 1 obs. of  4 variables:
.. ..$ Effect: chr "water_year"
.. ..$ W     : num 0.875
.. ..$ p     : num 0.512
.. ..$ p<.05 : chr ""
..$ Sphericity Corrections       :'data.frame': 1 obs. of  7 variables:
.. ..$ Effect   : chr "water_year"
.. ..$ GGe      : num 0.889
.. ..$ p[GG]    : num 4.26e-06
.. ..$ p[GG]<.05: chr "*"
.. ..$ HFe      : num 1.05
.. ..$ p[HF]    : num 1.26e-06
.. ..$ p[HF]<.05: chr "*"
$ Mauchly's Test for Sphericity:'data.frame':   1 obs. of  4 variables:
..$ Effect: chr "wtr_yr"
..$ W     : num 0.875
..$ p     : num 0.512
..$ p<.05 : chr ""
$ Sphericity Corrections       :'data.frame':   1 obs. of  7 variables:
..$ Effect   : chr "wtr_yr"
..$ GGe      : num 0.889
..$ p[GG]    : num 4.26e-06
..$ p[GG]<.05: chr "*"
..$ HFe      : num 1.05
..$ p[HF]    : num 1.26e-06
..$ p[HF]<.05: chr "*"

Я смог извлечь четвертую переменнуюF из первого кадра данных, используяRM_test[[1]][[4]][1] но не могу понять, как извлечь третью переменнуюp[GG] из фрейма данныхSphericity Corrections, Этот фрейм данных появляется дважды, так что извлечение любого из них будет хорошо.

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

Ответы на вопрос(1)

Решение Вопроса

Кажется, проблема в том, что вы не знаете, как извлечь элементы списка. Как вы сказали, есть дваSphericity Corrections фреймы данных, поэтому я буду, как получитьp[GG] значение для обоих.

используя номер в скобках

Для первого мы делаемRM_test[[1]][[3]][[3]], Вы можете сделать это шаг за шагом, чтобы понять это:

x1 <- RM_test[[1]]; str(x1)
x2 <- x1[[3]]; str(x2)
x3 <- x2[[3]]; str(x3)

Для второго сделайтеRM_test[[3]][[3]].

используя имя в скобках

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

RM_test[["ANOVA"]][["Sphericity Corrections"]][["p[GG]"]]

Во-вторых, сделать

RM_test[["Sphericity Corrections"]][["p[GG]"]]

с помощью$

Для первого сделайте

RM_test$ANOVA$"Sphericity Corrections"$"p[GG]"

Для второго сделайте

RM_test$"Sphericity Corrections"$"p[GG]"

Обратите внимание на использование цитаты"" когда необходимо.

 BugNumbers22 июн. 2016 г., 18:15
Все числовые решения в скобках вернули сообщение «Ошибка в RM_test [[i]] [[1]] [[3]] [[3]]: индекс за пределами границ». Однако решение с именами в скобках RM_test [["Sphericity Corrections"]] [["p [GG]"]] работало отлично. Спасибо вам за помощь.
 BugNumbers22 июн. 2016 г., 21:50
Мои извинения, это часть цикла for, и эти элементы извлекаются при каждой i-й итерации цикла. Когда я использую RM_test [[i]] [["Sphericity Corrections"]] [["p [GG]"]], это работает отлично. Спасибо за ответ.

Ваш ответ на вопрос