为什么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