首页 > 解决方案 > 为什么 any() 只为数字而不是逻辑 data.frame 定义?

问题描述

这似乎很令人惊讶:

df1 <- data.frame(A=TRUE, B=FALSE)
df2 <- data.frame(A=1, B=2)

> any(df1)
Error in FUN(X[[i]], ...) :
  only defined on a data frame with all numeric variables

> any(df2)
[1] TRUE

这似乎不是一个错误,因为错误正确地说明了any()仅在 a 中的所有变量data.frame都是数字的情况下才有效。

但是,为什么要any()对所有数值变量起作用,而不是在值都是合乎逻辑的时候呢?

标签: rdataframelogical-operatorsany

解决方案


any如果vector按照文档说明可以工作

给定一组逻辑向量,至少有一个值是真的吗?

在 OP 的帖子中,这两个示例都不是vectors。第一个是带有logical列的data.frame。如果我们通过方式满足文档,即创建一个逻辑向量,则转换为matrix(因为matrixavector无论如何都是具有某些dim属性的)

any(as.matrix(df1))
#[1] TRUE

或者vector通过unlisting 将其更改为 a list(adata.frame是s 的 a 又名相同长度的列listvector

any(unlist(df1))

在第二种情况下,有一个警告,它正在做一些强制

any(df2)
#[1] TRUE

警告消息:在 any(c(1, 2), na.rm = FALSE) 中:将“双”类型的参数强制转换为逻辑


推荐阅读