dplyr, тест dunn, ошибка в dim (robj) <- c (dX, dY): dims [product 0] не соответствуют длине объекта - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь передать набор данных, отфильтрованный по значению переменной, в функцию pairw.kw из пакета "asbio" в R.

example.df <- data.frame( 
                 species = sample(c("primate", "non-primate"), 50, replace = TRUE),
                 treated = sample(c("Yes", "No"), 50, replace = TRUE), 
                 gender = sample(c("male", "female"), 50, replace = TRUE), 
                 var1 = rnorm(50, 100, 5)
               )

library(dplyr)
library(asbio)

with(example.df, pairw.kw(var1, species, conf=0.95))

Этот код работает.Однако

example.df %>% 
   filter(treated=="No") %>% 
   {pairw.kw("var1", "species",conf = 0.95)}

выдает мне сообщение об ошибке

Ошибка в dim (robj) <- c (dX, dY): dims [product 0] не соответствуют длинеобъекта [1] </p>

Я не могу понять, что является причиной этого, кроме как предположить, что два сравниваемых вектора становятся различной длины после применения фильтра.

Есть ли способ исправить это, кроме явной подстановки данных в новый фрейм данных и использования этого взамен?Я знаю, что это сработает, но хотел знать, существует ли более элегантное решение.

1 Ответ

0 голосов
/ 26 февраля 2019

Прежде всего, %>% pipe передает data.frame в функцию pairw.kw в качестве первого аргумента.Во-вторых, функция pairw.kw хочет два вектора в качестве входа.Вы можете достичь этого с помощью %$% трубы из пакета magrittr.Работает подобно функции with.

library(magrittr)

example.df %>% 
   filter(treated=="No") %$% 
   pairw.kw(var1, species, conf = 0.95)

Ответ на вопрос в комментарии:

library(tidyverse)
library(magrittr)
library(asbio)

example.df %>% 
  group_by(treated) %>%
  nest() %>%
  mutate(
    kw = map(
      data,
      ~ .x %$% pairw.kw(var1, species, conf = 0.95)
    ),
    p_val = map_dbl(kw, ~ .x$summary$`Adj. P-value`)
  )
...