с использованием пакета purrr
map(sample, function(x) shapiro.test(rnorm(x)))
, что дает
[[1]]
Shapiro-Wilk normality test
data: rnorm(x)
W = 0.92567, p-value = 0.4067
[[2]]
Shapiro-Wilk normality test
data: rnorm(x)
W = 0.95621, p-value = 0.247
[[3]]
Shapiro-Wilk normality test
data: rnorm(x)
W = 0.96144, p-value = 0.1021
[[4]]
Shapiro-Wilk normality test
data: rnorm(x)
W = 0.98654, p-value = 0.4077
[[5]]
Shapiro-Wilk normality test
data: rnorm(x)
W = 0.99597, p-value = 0.2324
Редактировать: поэтому после редактирования вы запрашиваете какую-то таблицу. Это не работает так, как вы делаете это с вашим примером replicate_sw10, так как это матрица, в то время как map (или, к счастью, неудачно) приводит к списку. Итак, снова вы хотите использовать apply или map для выполнения одинаковых преобразований во всех частях списка.
replicate_swall <- map(sample, function(x) shapiro.test(rnorm(x)))
replicate_pvalue_extract <- map(replicate_swall , function(x) x["p.value",]) %>% unlist(., recursive = F)
table(replicate_pvalue_extract < 0.10) / length(replicate_pvalue_extract )
Это даст вам:
FALSE TRUE
0.896 0.104
Другой вариант - использовать пакет magrittr
для извлечения. Ваш код будет выглядеть следующим образом:
replicate_pvalue_extract <- map(replicate_swall, magrittr::extract, "p.value") %>% unlist(., recursive = F)
table(replicate_pvalue_extract < 0.10) / length(replicate_pvalue_extract )
В приведенном выше коде я предполагал, что вы хотите разделить вашу таблицу на все реплики и что не имеет значения, какой был ввод (с вводом я имею в виду 10,30). 50 100 или 500). Если вам небезразличны входные данные, вы можете хранить их отдельно, я приведу код ниже. Также обратите внимание, что я использовал длину, а не твёрдо закодированный / 1000. Таким образом, ваш код будет более универсальным c, если вы измените номер реплики, то число, на которое вы делите таблицу, также автоматически изменится. В противном случае вам придется вносить изменения в нескольких местах (особенно если кто-то другой использует ваш код), что может легко привести к ошибкам.
replicate_pvalue_extract <- map(replicate_swall , function(x) x["p.value",])
map(replicate_pvalue_extract , function(x) table(x < 0.10) / length(x))
Или вы можете объединить их:
map(map(replicate_swall, function(x) x["p.value",]), function(x) table(x < 0.10) / length(x))
Вот почему я дал вам опцию magrittr, поскольку мне не нравится функция (x) дважды. С magrittr это будет выглядеть так:
map(map(replicate_swall, magrittr::extract, "p.value"), function(x) table(x < 0.10) / length(x))
, что приведет к:
[[1]]
FALSE TRUE
0.896 0.104
[[2]]
FALSE TRUE
0.889 0.111
[[3]]
FALSE TRUE
0.904 0.096
[[4]]
FALSE TRUE
0.9 0.1
[[5]]
FALSE TRUE
0.891 0.109