问题描述
我想用 R tidyverse 函数 mutate()
、case_when()
和 expand_grid()
构造一个真值表。
在这里,我为“条件”逻辑连接词(%->%
,“if p then q”)定义了一个自定义运算符 ->
。我也尝试考虑 R 的三值逻辑。
以下代码正确吗?
我的 %->%
是否已被其他一些常见软件包占用?
library(tidyverse)
# NAs should appear in the middle of the resulting table
values <- c(TRUE,NA,FALSE)
`%->%` <- function(p,q) {
case_when((p & q) ~ TRUE,(p & !q) ~ FALSE,(!p | q) ~ TRUE,(is.na(p) | is.na(q)) ~ NA,NA ~ NA )
}
tt <- expand_grid(p = values,q = values) %>%
mutate(`p|q` = p | q,`p&q` = p & q,`p->q` = p %->% q)
tt
结果:
R> tt
# A tibble: 9 x 5
p q `p|q` `p&q` `p->q`
<lgl> <lgl> <lgl> <lgl> <lgl>
1 TRUE TRUE TRUE TRUE TRUE
2 TRUE NA TRUE NA NA
3 TRUE FALSE TRUE FALSE FALSE
4 NA TRUE TRUE NA TRUE
5 NA NA NA NA NA
6 NA FALSE NA FALSE NA
7 FALSE TRUE TRUE FALSE TRUE
8 FALSE NA NA FALSE TRUE
9 FALSE FALSE FALSE FALSE TRUE
是否有内置的 R 运算符(或 CRAN 上的首选包)用于我不知道的条件(更快、更严格测试、矢量化、通用...)?
或者我真的必须使用替代实现,其中 NA -> NA 是 TRUE 而不是 NA?
(我有中级 R 技能,我是逻辑初学者)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)