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`)
)