R - Запуск t-теста от операторов трубопровода - PullRequest
0 голосов
/ 26 апреля 2018

Можно ли запустить t.test из piping операторов?
Я пытался найти ответ на этот вопрос, но большинство вопросов по этой теме касаются выполнения множества тестов с одним и тем же набором данных.
Я посмотрел пакет broom, но, похоже, он хорошо подходит для чтения результатов.
Меня интересует, возможно ли просто использовать piping и запустить t.test() на выходе.
Например, вот некоторые примеры данных

library(dplyr)
d <- data.frame(
  group = sample(LETTERS[1:2], size = 10, replace = T),
  amount = sample(1:3, size = 10, replace = T)
  )

Если я запускаю t.test, используя base R, я получаю результаты:

t.test(d$amount~d$group, var.equal = T)
> d
   group amount
1      A      2
2      A      2
3      B      1
4      B      3
5      A      2
6      B      1
7      B      2
8      A      1
9      B      3
10     A      3

Но если япопробуйте использовать piping, я получаю ошибки:

d %>% t.test(amount~group, var.equal = T)

Error: is.atomic(x) is not TRUE
In addition: Warning messages:
1: In is.na(y) :
  is.na() applied to non-(list or vector) of type 'language'
2: In mean.default(x) : argument is not numeric or logical: returning NA
3: In var(x) : NAs introduced by coercion
4: In mean.default(y) : argument is not numeric or logical: returning NA

Нужно ли делать какие-то дополнительные манипуляции?

1 Ответ

0 голосов
/ 26 апреля 2018

Мы можем разместить его внутри summarise как list

d %>%
  summarise(ttest = list(t.test(amount ~ group, var.equal = TRUE))) 

и если нам нужно извлечь только значение, это можно сделать

d %>% 
  summarise(pval = t.test(amount ~ group, var.equal = TRUE)$p.value)

Или мы можем поместить его в {}, а затем сделать t.test

d %>%
     {t.test(.$amount ~ .$group, var.equal = TRUE)}

Или без фигурных скобок, указав data для метода формулы

d %>%
     t.test(amount ~ group, data = ., var.equal = TRUE)

РЕДАКТИРОВАТЬ: на основе комментариев @ hpesoj626

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...