创建具有逻辑比较的函数作为输入 R

Creating functions with logical comparatives as input R

为了检查一致性,我对 R 中的两个变量进行了多次顺序比较评估。

在这个例子中,假设我有一个布尔值 ANES_6 和一个数字 ANES。如果患者麻醉时间超过 6 小时,则布尔值为 1,否则为 0。数值是患者处于麻醉状态的时间。

我正在寻找一个可以替换以下多个复制粘贴的函数:

data %>% select(ANES_6, ANES) %>% 
          filter(ANES_6 == 1 & ANES < 6)) %>% 
          tally()

data %>% select(ANES_6, ANES) %>% 
          filter(ANES_6 == 0 & ANES >= 6)) %>% 
          tally()

data %>% select(ANES_6, ANES) %>% 
              filter(ANES_6 == 1 & ANES >= 6)) %>% 
              tally()

data %>% select(ANES_6, ANES) %>% 
              filter(ANES_6 == 0 & ANES >= 6)) %>% 
              tally()

我可以创建以下函数(上面显示的所有情况并非详尽无遗):

my_func <- function(x, y) {
 if (x == "gt" & y == 1) {
      data %>% select(ANES_6, AnaestheticTime_hours_) %>% 
           filter(ANES >= 6 & ANES_6 == 1) %>% 
           tally()
 } else if (x == "lt" & y == 0 ) {
      data %>% select(ANES_6, AnaestheticTime_hours_) %>% 
           filter(ANES < 6 & ANES_6 != 1) %>% 
           tally()
 }}

以 x 和 y 作为输入,x 的值为 c('lt', 'gt'),y 为 c(0, 1),以评估所有可能的条件.但是,这将需要编写更多而不是更少的代码。

有没有一种方法可以在函数中输入逻辑比较,从而实现以下工作:

my_func <- function(x, y) {
          data %>% select(ANES_6, ANES) %>% 
               filter(ANES x 6 & ANES_6 == y) 
     }

with x replaced by >=, <, etc, in the function.目前,这不起作用,是否有任何解决方法?

尝试分组。问题通常应该包括可重现的测试数据,但我这次提供了它。

library(dplyr)

data <- data.frame(ANES_6 = c(0, 0, 1, 1), ANES = 5:6) # test data
data %>%
  group_by(ANES_6, ANES >= 6) %>%
  tally %>%
  ungroup

给予:

# A tibble: 4 x 3
  ANES_6 `ANES >= 6`     n
   <dbl> <lgl>       <int>
1     0. FALSE           1
2     0. TRUE            1
3     1. FALSE           1
4     1. TRUE            1