【发布时间】:2013-05-29 19:37:24
【问题描述】:
这是一个向量
a <- c(TRUE, FALSE, FALSE, NA, FALSE, TRUE, NA, FALSE, TRUE)
我想要一个简单的函数,每当“a”中有TRUE 时返回TRUE,每当“a”中有FALSE 或NA 时返回FALSE。
以下三件事不起作用
a == TRUE
identical(TRUE, a)
isTRUE(a)
这是一个解决方案
a[-which(is.na(a))]
但这似乎不是一个简单明了的解决方案
还有其他解决方案吗?
以下是我知道的一些函数(和运算符):
identical()
isTRUE()
is.na()
na.rm()
&
|
!
还有哪些其他功能(运算符、提示等...) 处理
TRUE、FALSE、NA、NaN有用吗?NA和NaN有什么区别?除了
TRUE、FALSE、NA和NaN之外,还有其他“逻辑事物”吗?
非常感谢!
【问题讨论】:
-
要回答您的第一个问题,这里有一个方法:
Vectorize(isTRUE)(a)。 -
更严格地说,我认为
!is.na(x) & x应该可以工作,只要您期望的值肯定包含在 {TRUE,FALSE,NA,NaN} 中。 .. -
我觉得其中一些区别(
NAvsNaN、isTRUEvsis.na等)必须在其他地方/以前讨论过,甚至可能在 StackOverflow 上讨论过。谷歌搜索“na nan is.finite is.nan is.na”让我找到stat.ethz.ch/R-manual/R-devel/library/base/html/is.finite.html,奇怪的是没有“另见”到stat.ethz.ch/R-manual/R-devel/library/base/html/NA.html -
为了完整起见,我会在上面的列表中添加
all.equal、is.finite和is.nan... -
NaN 是数字,因此您无法在逻辑向量中遇到它。建议的解决方案
a[-which(is.na(a))]只有 7 个元素,而a有 9 个元素。你确定那是你想要的吗?也许sapply(a, isTRUE)是你想要的?
标签: r boolean logical-operators na r-faq