Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to suppress warnings from stats:::regularize.values?

Tags:

r

warnings

In newer versions of R (I have 3.6 and previously had 3.2), the stats::regularize.values function has been changed to have a default value of warn.collapsing as TRUE. This function is used in splinefun and several other interpolation functions in R. In a microsimulation model, I am using splinefun to smooth a large amount (n > 100,000) of data points of the form (x, f(x)). Here, x is a simulated vector of positive-valued scalers, and f(x) is some function of (x). With an n that large, there are often some replications of pseudo-randomly generated values (i.e., not all values of x are unique). My understanding is that splinefun gets rid of ties in the x values. That is not a problem for me, but, because of the new default, I get a warning message printed each time (below)

"In regularize.values(x, y, ties, missing(ties)) : collapsing to unique 'x' values"

Is there a way to either change the default of the warn.collapsing argument of the stats::regularize.values function back to F? Or can I somehow suppress that particular warning? This matters because it's embedded in a long microsimulation code and when I update it I often run into bugs. So I can't just ignore warning messages.

I tried using the formalize function. I was able to get the default arguments of stats::regularize.values printed, but when I tried to assign new values using the alist function it said there is no object 'stats'.

like image 858
user3758250 Avatar asked Jul 02 '19 23:07

user3758250


2 Answers

I had this problem too, and fixed it by adding ties=min to the argument list of splinefun(). The value of missing(ties) is now passed as warn.collapsing to 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

Also see: https://cran.r-project.org/doc/manuals/r-release/NEWS.html and search for regularize.values().

like image 154
Glenn Davis Avatar answered Sep 19 '22 12:09

Glenn Davis


Referencing this article

Wrap your call of regularize.values like this:

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

Working example (adapted from the above link to call a function):

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
like image 40
Mako212 Avatar answered Sep 21 '22 12:09

Mako212