Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么any()只为数字而不是逻辑data.frame定义?_R_Dataframe_Logical Operators_Any - Fatal编程技术网

为什么any()只为数字而不是逻辑data.frame定义?

为什么any()只为数字而不是逻辑data.frame定义?,r,dataframe,logical-operators,any,R,Dataframe,Logical Operators,Any,这似乎相当令人惊讶: 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 df1任意(df2) [1] 真的 这似乎不是一个bug,因为错误正确地指出any()

这似乎相当令人惊讶:

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
df1任意(df2)
[1] 真的
这似乎不是一个bug,因为错误正确地指出
any()
仅在
data.frame
中的所有变量都是数字的情况下才有效


但是什么原因使得
any()
可以处理所有的数值变量,而不是所有的值都是逻辑的呢?

任何
都可以处理,如果它是
向量,就像文档中说的那样

给定一组逻辑向量,是否至少有一个值为真

在OP的帖子中,两个例子都不是
vector
s。第一个是带有
逻辑列的data.frame。如果我们顺便满足文档要求,即创建一个逻辑向量,则可以将其转换为
矩阵
(因为
矩阵
是一个
向量
,具有一些
dim
属性)

或者通过
取消列出
列表
将其更改为
向量
(一个
数据框
是一个
列表
,即长度相同的
向量列)

在第二种情况下,有一个警告,它正在进行一些胁迫

any(df2)
#[1] TRUE
警告消息:在任意(c(1,2)中,na.rm=FALSE):强制参数 类型为“double”到“logical”


这是一个快速的回答,但我不认为它试图回答这个问题。警告和强制只会引发更多的问题,例如,为什么它会强制一个数值
数据.frame
为逻辑,但首先对一个逻辑
数据.frame
不起作用。@Karoliskoncevicius是的,这种行为是,不合逻辑。@KarolisKoncevičius我更新了帖子,因为你的
any
示例都不是
any
的正确方法。有些行为可能是bug,但它明确提到要传递一个vectorMaybe,您应该把它带到哪里?
any(unlist(df1))
any(df2)
#[1] TRUE