2
My list:
structure(list(col1 = structure(list(a = 1:5, b = 1:5, c = 1:5), .Names = c("a",
"b", "c"), row.names = c(NA, -5L), class = "data.frame"), col2 = structure(list(
a = 6:10, c = 6:10), .Names = c("a", "c"), row.names = c(NA,
-5L), class = "data.frame"), col3 = structure(list(a = 11:15,
c = 11:15), .Names = c("a", "c"), row.names = c(NA, -5L), class = "data.frame"),
col4 = structure(list(a = 16:20, b = 16:20), .Names = c("a",
"b"), row.names = c(NA, -5L), class = "data.frame"), col5 = structure(list(
a = 21:25, c = 21:25), .Names = c("a", "c"), row.names = c(NA,
-5L), class = "data.frame")), .Names = c("col1", "col2",
"col3", "col4", "col5"))
I tried to:
res<-lapply(list,function(x)colSums(subset(x,select=c('a'))))
and
res<-lapply(list,function(x)colMeans(subset(x,select=c(1,2))))
and the result was ok.
But when I do:
res<-lapply(list,function(x)shapiro.test(subset(x,select=c(1,2))))
do not succeed (Error: is.numeric(x) is not TRUE
).
What to do?
This error arises simply because the Shapiro test is only applicable to numerical vectors, not data.frames. From the help page, "x a Numeric vector of data values." The normality test only makes sense for vectors, each vector da df may or may not follow a normal distribution. As you say, for other cases,
colSums
andcolMeans
it’s all right.– Rui Barradas