繁体   English   中英

将 function 适配到 tidyverse 生态系统

[英]Adapting a function to tidyverse ecosystem

来自library(rstatix)的 Function box_m当前要求其第一个参数不包含分组变量,其第二个参数仅是分组变量。 例如: box_m(d[-1], d$Group)

我正在尝试重新编写此 function 以便box_m2可以像: box_m2(d, Group)一样工作。

我尝试了以下但没有成功,但想知道是否有办法实现我的目标?

library(rstatix)
library(tidyverse)

d <- read.csv("https://raw.githubusercontent.com/rnorouzian/v/main/memory.csv")[-1]

  box_m(d[-1], d$Group) # How the function currently works

 # box_m2(d, Group) # How I would like the function to work
 
  
# My trial without success to achieve `box_m2`:

  box_m2 <- function(data, group){
    
    dat <- dplyr::select(data, -vars(group))
    box_m(dat, one_of(group))
  }

# New function
  box_m2(d, Group) 

您可以在 curly-curly ( {{}} ) 运算符的帮助下编写 function。

library(rstatix)
library(dplyr)

box_m2 <- function(data, group){
  dat <- dplyr::select(data, -{{group}})
  box_m(dat, data %>% pull({{group}}))
}

identical(box_m(d[-1], d$Group), box_m2(d, Group))
#[1] TRUE

我们还可以使用ensym转换为符号并计算 ( !! )。 这样,可以灵活地传递未引用或引用的 arguments

library(rstatix)
library(dplyr)
library(rstatix)

box_m2 <- function(data, group){
  group <- ensym(group)
  dat <- dplyr::select(data, -!!group)
  box_m(dat, data %>% 
         pull(!! group))
  }

-测试

identical(box_m(d[-1], d$Group), box_m2(d, Group))
#[1] TRUE
identical(box_m(d[-1], d$Group), box_m2(d, "Group"))
#[1] TRUE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM