首页 > 解决方案 > dplyr,dunn 测试,dim(robj) <- c(dX, dY) 中的错误:dims [product 0] 与对象的长度不匹配

问题描述

我正在尝试将由变量值过滤的数据集从 R 中的“asbio”包传递给 pairw.kw 函数。

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] 的长度不匹配

除了假设被比较的两个向量在应用过滤器后变得不同长度之外,我无法理解是什么原因造成的。

除了将数据显式设置为新数据框并使用它之外,还有其他方法可以解决此问题吗?我知道这会起作用,但想知道是否存在更优雅的解决方案。

标签: rfilterdplyrasbio

解决方案


首先,%>%管道将 data.framepairw.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`)
  )

推荐阅读