【问题标题】:Creating functions with logical comparatives as input R创建具有逻辑比较作为输入 R 的函数
【发布时间】:2018-06-05 11:11:21
【问题描述】:

为了检查一致性,我对 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) 
     }

在函数的输入中将x替换为&gt;=&lt;等。目前,这不起作用,是否有任何解决方法?

【问题讨论】:

    标签: r function logical-operators


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 2021-12-02
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多