如何抑制来自stats ::: regularize.values的警告?

时间:2019-07-02 23:02:26

标签: r warnings

在R的较新版本(我有3.6,以前是3.2)中,stats::regularize。values函数已更改为默认值warn.collapsing为TRUE。此函数用在splinefun和R中的其他几个插值函数中。在微仿真模型中,我使用splinefun来平滑(x, f(x))。在此,x是正值缩放器的模拟向量,而f(x)是(x)的某些函数。当n很大时,通常会复制一些伪随机生成的值(即,并非x的所有值都是唯一的)。我的理解是splinefun摆脱了x值的束缚。这对我来说不是问题,但是由于采用了新的默认设置,因此每次(如下)我都会收到一条警告消息打印

  

“在regularize.values(x,y,关系,丢失(关系))中:折叠为   唯一的“ x”值”

是否可以将stats::regularize.values函数的warn.collapsing参数的默认值更改回F?还是我可以以某种方式禁止该警告?这很重要,因为它嵌入了很长的微仿真代码中,当我对其进行更新时,我经常会遇到错误。因此,我不能只是忽略警告消息。

我尝试使用形式化功能。我能够打印出stats::regularize.values的默认参数,但是当我尝试使用alist函数分配新值时,它说没有对象'stats'。

2 个答案:

答案 0 :(得分:3)

我也遇到了这个问题,并通过将ties=min添加到splinefun()的参数列表来解决此问题。 missing(ties)的值现在作为warn.collapsing传递给regularize.values()

https://svn.r-project.org/R/trunk/src/library/stats/R/splinefun.R
https://svn.r-project.org/R/trunk/src/library/stats/R/approx.R

另请参阅: https://cran.r-project.org/doc/manuals/r-release/NEWS.html 并搜索regularize.values()

答案 1 :(得分:0)

引用this article

像这样包装您对regularize.values的呼叫:

withCallingHandlers(regularize.values(x), warning = function(w){
  if (grepl("collapsing to unique 'x' values", w$message))
   invokeRestart("muffleWarning")
})

工作示例(从上面的链接改编为调用函数):

f1 <- function(){
  x <- 1:10
  x + 1:3
}

f1()

# if we just call f1() we get a warning
Warning in x + 1:3 :
  longer object length is not a multiple of shorter object length
 [1]  2  4  6  5  7  9  8 10 12 11


withCallingHandlers(f1(), warning=function(w){invokeRestart("muffleWarning")})
 [1]  2  4  6  5  7  9  8 10 12 11