我正在尝试查找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/