R:range(data.frame)可以排除无限值吗?

标签 r range infinity

我正在尝试查找range具有无限值的数据框:

> f <- data.frame(x=c(1,2),y=c(3,Inf))
> range(f)
[1]   1 Inf
> range(f,finite=TRUE)
Error in FUN(X[[2L]], ...) : 
  only defined on a data frame with all numeric variables
Calls: Summary.data.frame -> lapply -> FUN
> range(f$y)
[1]   3 Inf
> range(f$y,finite=TRUE)
[1] 3 3

为什么我会收到错误消息?

我能做得更好吗

> do.call(range,lapply(f,range,finite=TRUE))
[1] 1 3

这是一个错误吗?众所周知吗?我应该举报吗?

最佳答案

您需要使用(正如大卫在评论中指出的那样):

range.default(f, finite=TRUE)
# [1] 1 3

range(f, finite=1)
# [1] 1 3

该函数错误地要求 finite 为数字,但随后正确使用它来删除无限值。注意:

f2 <- data.frame(x=1:2, y=3:4)
range(f2, finite=TRUE)  # Error

显然,发生了一些有趣的事情,泛型是一个基元,而你的参数是一个对象,可能与(来自 ?range)相关:

range is a generic function: methods can be defined for it directly or via the Summary group generic. For this to work properly, the arguments ... should be unnamed, and dispatch is on the first argument.

所以基本上,在检查其参数时,它认为 finite=TRUE 是用于检查范围的数据的一部分,并且由于它是逻辑的,因此无法通过数值测试。也就是说,一旦通过检查,它就会正确计算。

确认:

range(f, finite=2000)
# [1] 1 3

关于R:range(data.frame)可以排除无限值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30383064/

相关文章:

r - 使用多行更新连接

r - 在igraph中生成社区图

r - 如何在 R 中创建线性变换函数?

VBA-Excel : Mention a Range equal to one given with less one row

javascript - contenteditable 中的自动链接 URL

python - 将 -inf 替换为零值

r - 求解代数方程

excel - VBA:修改图表数据范围

Haskell - Prime Powers 练习 - 无限合并

从 C 中的终端计算最小值/最大值