在R中,我使用Min和Max来查找给定向量的最小值和最大值.
此向量是计算和过滤的结果,通常可以是NULL或空列表.
在这种情况下,我们会收到警告,例如:
警告消息:在max(el)中:max没有非缺失参数; 返回-Inf
如果您在循环(或层)中为多个输入执行此操作,您将开始遇到大量警告
Inf的默认值不适合我的目的,并希望返回0或其他值.
现在,除了每次检查输入是否对if..else条件有效外,我是否有任何方法可以在空输入的情况下为这些Min,Max方法规定默认返回值.
此外,后处理Min,Max结果以我自己的值手动删除/替换Inf并不是真正有效的方法.
那么,有没有问R返回我从最小值,最大值自己的自定义默认值空载体的任何有效的方法,而不是+ Inf文件和-Inf?
使用if..else进行预处理并使用Inf替换进行后处理并不是那么优雅.
如果在Min周围编写自定义包装器,Max是唯一的方法,您如何建议在不影响速度或优雅的情况下编写它?
好吧,它可能不优雅,但这似乎有效:
mymax <- function(...,def='hello world',na.rm=FALSE)
if(!is.infinite(x<-suppressWarnings(max(...,na.rm=na.rm)))) x else def
mymax() # 'hello world'
mymax(def=2) # 2
mymax(c(),NULL,def=2) # 2
mymax(c(),NA) # NA
mymax(1,c(NA,3),na.rm=TRUE) # 1
Run Code Online (Sandbox Code Playgroud)
它并不慢......
require(microbenchmark)
test <- rnorm(1e5)
microbenchmark(
max=max(test),
mymax=mymax(test)
)
# Unit: milliseconds
# expr min lq median uq max neval
# max 1.135445 1.141384 1.143814 1.162171 1.689940 100
# mymax 1.119248 1.123297 1.147054 1.190517 1.660244 100
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2171 次 |
| 最近记录: |