[Rd] Why is any() only defined for a numeric and not logical data.frame?
Rui Barradas
ru|pb@rr@d@@ @end|ng |rom @@po@pt
Sun Feb 16 20:47:41 CET 2020
Hello,
As it turns out, this is valid for all generics of the ?Summary group.
From help("Summary"):
Group "Summary":
all, any
sum, prod
min, max
range
methods("Summary") shows that there is a method for df's.
And the code of Summary.data.frame has an explicit test
if (!is.numeric(x) && !is.complex(x))
stop("only defined on a data frame with all numeric variables")
So now the question is even more pertinent (?)(I think):
If sum(<logical vector>) is a valid instruction, why only
sum(<numeric df>)
sum(<complex df>)
are valid?
Rui Barradas
Às 19:23 de 16/02/20, Karolis Koncevičius escreveu:
> Hello,
>
> I recently stumbled on an unusual behaviour of any() and all() and have
> been adviced from StackOverflow to share it here [1].
>
> df1 <- data.frame(A=TRUE, B=FALSE)
> df2 <- data.frame(A=1, B=0)
>
> > any(df1)
> Error in FUN(X[[i]], ...):
> only defined on a data frame with all numeric variables
>
> > any(df2)
> [1] TRUE
> Warning message: In any(c(1, 2), na.rm = FALSE):
> coercing argument of type 'double' to logical
>
> Same results happen when using all()
>
> So the any() and all() do not work on data frames with logical values,
> but work if the values are numeric.
>
> This doesn't seem to be a bug because error correctly states that any()
> will only work on an all-numeric data.frame. However the behaviour
> doesn't seem intentional and I cannot come up with any reason for it
> behaving this way.
>
> Maybe any() and all() need to be modified to not work on data.frames()
> at all, which would also be consistent with is.nan() ?
>
> [1]:
> https://stackoverflow.com/questions/60251847/why-is-any-only-defined-for-a-numeric-and-not-logical-data-frame
>
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list