Lapply does not return the desired result for some functions

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:

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 run:

res<-lapply(list,function(x)shapiro.test(subset(x,select=c(1,2))))

I'm not successful ( Error: is.numeric(x) is not TRUE ).

What to do?

    
asked by anonymous 09.09.2018 / 06:06

1 answer

4

As well pointed out by Rui's comment, the shapiro.test function is only defined for vectors. But nothing prevents us from creating a version for it that can be applied to columns of data frames:

shapiro.test.df <- function(df){
  apply(df, 2, shapiro.test)
}

The shapiro.test.df function was created simply by applying the shapiro.test function itself to the columns of any data frame. Now just use lapply to apply it to elements in a list, as long as these elements are data frames:

lapply(dados, shapiro.test.df)

$col1
$col1$a

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672


$col1$b

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672


$col1$c

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672



$col2
$col2$a

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672


$col2$c

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672



$col3
$col3$a

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672


$col3$c

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672



$col4
$col4$a

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672


$col4$b

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672



$col5
$col5$a

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672


$col5$c

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98676, p-value = 0.9672
    
09.09.2018 / 20:55