【发布时间】: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替换为>=、<等。目前,这不起作用,是否有任何解决方法?
【问题讨论】:
标签: r function logical-operators