如何解决带有 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 举报,一经查实,本站将立刻删除。