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'.
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()
.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With