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

Я пытаюсь передать набор данных, отфильтрованный по значению переменной, в функцию 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]

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

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

1 ответ

Решение

Прежде всего %>% труба передает 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`)
  )
Другие вопросы по тегам