Bonjour,
J'ai un j'aimerai appliqué un test de shapiro sur une aggrégation de donnée d'une colonne en fonction d'un code donnée par une autre colonne. J'aimerai faire cette commande sur autant de fois qu'il y a d'autre colonne que la colonne donnant le code. Voici mes données (ne contenant que 3 colonnes, j'en ai une bonne vingtaine sinon):
dput(data1)
structure(list(moda = structure(c(20L, 20L, 20L, 20L, 20L, 20L,
20L, 20L, 20L, 20L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L,
11L, 11L, 11L, 11L, 11L, 11L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 17L, 17L, 17L,
17L, 17L, 17L, 17L, 17L, 17L, 17L, 18L, 18L, 18L, 18L, 18L, 18L,
18L, 18L, 18L, 18L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L, 19L,
19L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 12L,
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L,
13L, 13L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 14L, 14L, 14L,
14L, 14L, 14L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L,
16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 21L, 21L, 21L,
21L, 21L, 21L, 21L, 21L, 21L, 21L, 22L, 22L, 22L, 22L, 22L, 22L,
22L, 22L, 22L, 22L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L,
23L), .Label = c("ACN1", "ACN2", "BA", "BM", "BS1", "BS2", "CN",
"EK5", "HW1", "HW2", "HW3", "L27", "L5K", "LC", "M2K", "M630",
"PB1", "PB2", "PB3", "PG", "RMB", "RMC", "RMM"), class = "factor"),
epicotyle = c(1.5, 1.5, 2, 1, 1.5, 1.2, 1, 2.4, 1.3, 1.4,
1.7, 2, 1.8, 2.3, 2.5, 2.5, 1.5, 1.5, 2, 1.3, 1.5, 1.8, 1.3,
1.8, 1.7, 1.5, 2.3, 1.8, 2.2, 1.5, 1.5, 1.5, 1.3, 1.5, 1.5,
1.5, 1.5, 1.8, 1.5, 2.1, 1.8, 1.3, 2, 1.5, 2, 3.5, 1.5, 1.7,
1.7, 2, 1.7, 2, 1.5, 2, 1.5, 2, 2, 1.5, 2, 1.5, 1.8, 1, 2,
3, 1.6, 1.5, 1.5, 1.3, 1.5, 1.5, 1.2, 1.5, 1.5, 1, 1.2, 1.5,
1.5, 1.5, 1.5, 2, 1.1, 1.5, 1.5, 1.7, 1.8, 1.5, 1.3, 1.5,
1.5, 2.5, 1.2, 1.4, 1, 1.5, 2, 1.5, 1.2, 1.5, 2, 2.3, 2.1,
2, 2.4, 1.5, 1.7, 1.4, 2.4, 1, 1, 2, 1.5, 1.2, 2.4, 1.2,
1, 0.8, 1.8, 1.5, 1.5, 1.5, 2.1, 1.5, 1.4, 1.5, 1.3, 1.5,
3, 2.6, 1.5, 2.2, 1.9, 1.5, 1.4, 1.4, 2.5, 2.1, 2, 1.5, 2,
2, 2, 1.5, 2.1, 2, 1.5, 2.5, 2.5, 3, 3, 3.5, 3.5, 3, 2, 2.5,
3.5, 1, 1.2, 1.5, 2.5, 1.5, 1.5, 1.5, 1.5, 1.5, 2.4, 1.5,
2, 3, 1.7, 3, 2.5, 2, 2.5, 2.5, 2.5, 1.5, 1.5, 1.5, 1, 1.5,
2, 1.4, 1.2, 1.7, 2.1, 1.5, 2, 1.5, 1.5, 2, 1.4, 2, 3, 2,
2, 2, 2.5, 3, 3, 1.7, 3, 1.8, 2, 1.8, 2.2, 2.3, 1.5, 2, 1.8,
1.8, 1.3, 2, 1.8, 1.8, 2, 1.8, 1.5, 1.7, 2, 1.4, 1.5, 1.7,
1.5, 2, 1.2, 1.3, 1.5, 1, 2, 1), hypocotyle = c(3.8, 4, 7,
5, 6, 4, 5.4, 3.5, 3.6, 5, 5, 7, 2.5, 6.5, 5.4, 5, 6, 5.7,
7, 5.5, 5.7, 5.5, 7, 6.5, 5.5, 5.5, 6.7, 4.9, 5.3, 6.7, 5.8,
6.5, 6, 5.6, 5, 5.5, 6, 6, 6, 3.5, 4.7, 4.5, 5.9, 5, 6, 7,
6, 5.5, 5, 5.8, 5.5, 5.5, 4.8, 5.7, 6, 7, 5.2, 5, 5.2, 5.3,
5.6, 5, 5.3, 6, 5, 5.5, 4.5, 5.7, 6, 4.5, 4.4, 5.2, 5.2,
4.1, 5.2, 5.2, 5.4, 6, 5.5, 6.5, 5, 6, 5.5, 7.5, 5.2, 5.6,
5.4, 5.5, 5, 5, 6, 5.2, 6, 6.3, 6.3, 4.2, 5.1, 3.5, 6, 6,
6, 6, 5, 5, 6, 5, 5.6, 5.5, 5, 5, 6, 5.2, 6, 6.3, 6.3, 4.2,
5.1, 3.8, 4, 7, 5, 6, 4, 5.4, 3.5, 3.6, 5, 6, 4.8, 4.7, 4.4,
5.5, 3.5, 5.3, 4.3, 5.5, 4.5, 5.5, 4.2, 6, 4.3, 4, 4.7, 3.5,
3.7, 4.2, 5, 5, 5.1, 5.7, 5, 3.5, 4, 5.6, 3.9, 3.5, 7, 6,
6, 6, 6.5, 5.5, 4.5, 6.5, 6.5, 3, 5, 5.5, 5.3, 4, 5.5, 6,
4, 5.5, 6, 5, 4, 4.5, 4.5, 4, 3.5, 4.5, 5, 4, 4.5, 5, 4.7,
6, 3.8, 4.5, 4.1, 4, 3.7, 4, 4.5, 5, 6, 4.5, 6, 5.7, 3.7,
5.8, 6.2, 5.5, 5, 3.8, 4, 7, 5, 6, 4, 5.4, 3.5, 3.6, 5, 7,
6.5, 8, 6.5, 5.7, 7.5, 7.3, 7.4, 7, 7.5, 7.3, 7.1, 7.3, 7.3,
7.2)), class = "data.frame", row.names = c(NA, -230L))
J'ai essayé les commandes suivantes :
> shap <- function(y) { b <- shapiro.test(y); c(b$statistic, b$p.value)}
> aggre <- function (p) {aggregate(formula =p~data1[,1],
+ data = data1,
+ FUN = shap)}
> lshap <- lapply(data1, aggre)
Error in shapiro.test(y) : is.numeric(x) is not TRUE
J'avais aussi essayé de faire la fonction aggregate(formula =.~data1[,1]data = data1,FUN = shap) sans succès.
Pourtant ma fonction aggre marche lorsque je sélectionne une seul colonne.
Merci d'avoir pris la peine de me lire,
Simon