我试图找到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
Run Code Online (Sandbox Code Playgroud)
为什么我收到错误?
我可以做得更好吗?
> do.call(range,lapply(f,range,finite=TRUE))
[1] 1 3
Run Code Online (Sandbox Code Playgroud)
这是一个错误吗?它知道了吗?我应该报告吗?
你需要使用(正如David在评论中指出的那样):
range.default(f, finite=TRUE)
# [1] 1 3
Run Code Online (Sandbox Code Playgroud)
要么
range(f, finite=1)
# [1] 1 3
Run Code Online (Sandbox Code Playgroud)
该函数错误地要求finite是数字,但然后正确地使用它来删除无限值.注意:
f2 <- data.frame(x=1:2, y=3:4)
range(f2, finite=TRUE) # Error
Run Code Online (Sandbox Code Playgroud)
显然,通用是一个原始的,而你的论点是一个对象,可能与(来自?range)相关:
range是一个通用函数:可以直接或通过Summary group generic定义方法.为了使其正常工作,参数...应该是未命名的,并且dispatch在第一个参数上.
所以基本上,当检查它的参数时,它认为finite=TRUE是检查范围的数据的一部分,并且因为它是逻辑的,它不能通过数值测试.也就是说,一旦它通过检查,它就会正确计算.
确认:
range(f, finite=2000)
# [1] 1 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |