带有 R 函数的 3 值真值表有条件的?

问题描述

我想用 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...