R вопрос: функция shapiro.test не работает в dplyr :: summaze, в то время как другие функции сводки работают - PullRequest
0 голосов
/ 25 апреля 2019

Когда я пытаюсь использовать shapiro.test в качестве сводной функции на моем R DataFrame, я получаю ошибку:

df %>% summarize_all(shapiro.test)
Error: Column `A` must be length 1 (a summary value), not 4

Вот мои настройки:

df = data.frame(A=sample(1:10,5), B=sample(1:10,5))
df
df %>% summarize_all(mean)
df %>% summarize_all(sd)
df %>% summarize_all(sum)
df %>% summarize_all(shapiro.test)
df$A %>% shapiro.test()

Вывод:

> df = data.frame(A=sample(1:10,5), B=sample(1:10,5))
> df
   A B
1  1 8
2  8 4
3  5 5
4 10 6
5  7 1
> df %>% summarize_all(mean)
    A   B
1 6.2 4.8
> df %>% summarize_all(sd)
         A        B
1 3.420526 2.588436
> df %>% summarize_all(shapiro.test)
Error: Column `A` must be length 1 (a summary value), not 4
> df$A %>% shapiro.test()

    Shapiro-Wilk normality test

data:  .
W = 0.96086, p-value = 0.814

Что особенного в shapiro.test, из-за которого он не работает векторизованно для столбцов?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Вы можете перебирать каждый столбец, используя map из пакета purrr в качестве альтернативы apply

df %>%
  map(~shapiro.test(.))

Также рассмотрите возможность использования sapply и lapply

df %>% 
  sapply(.,shapiro.test)


df %>% 
  lapply(.,shapiro.test)
1 голос
/ 25 апреля 2019

Только что получил: shaprio.test не возвращает ни одного числа. Это, однако, работает:

> df %>% apply(2, shapiro.test)
$A

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.96086, p-value = 0.814


$B

    Shapiro-Wilk normality test

data:  newX[, i]
W = 0.98396, p-value = 0.9546

Также:

> f = function(x){st = shapiro.test(x); return(st$p.value)}
> f(df$A)
[1] 0.8139521
> df %>% summarise_all(f)
          A         B
1 0.8139521 0.9546435
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...