Можно ли использовать старую версию пакета stats в R? - PullRequest
0 голосов
/ 30 марта 2020

Возможно ли использовать старую версию пакета stats в R?

Функция stats:::regularize.values вызывает у меня предупреждения и ошибки в последней версии R (любой версии > 3,5). У меня нет возможности вернуться к старой версии R. Я понятия не имею, где в моем коде вызывается функция regularize.values, поскольку я использую несколько функций, некоторые из которых находятся в разных R-пакетах. Я попытался изменить вызов на regularize.values в своем коде, выполнив

assignInNamespace("regularize.values", regularize.values.old.version, ns = "stats")

Но я получил ошибку:

Error in assignInNamespace("regularize.values", regularize.values.OV,  : 
  locked binding of ‘regularize.values’ cannot be changed

Заранее спасибо за ваши предложения!

1 Ответ

2 голосов
/ 30 марта 2020

Вы можете попробовать это:

assignInNamespace("regularize.values", regularize.values.OV, 
                  ns="stats", envir = as.environment("package:stats"))

Однако, это будет работать, только если ошибка не генерируется пакетом, который зависит от уже загруженного stats


Поэтому рабочий раствор должен быть:

assignInNamespace("regularize.values", function(x, y, ties) {
    x <- xy.coords(x, y)
    y <- x$y
    x <- x$x
    if(any(na <- is.na(x) | is.na(y))) {
    ok <- !na
    x <- x[ok]
    y <- y[ok]
    }
    nx <- length(x)
    if (!identical(ties, "ordered")) {
        o <- order(x)
    x <- x[o]
    y <- y[o]
    if (length(ux <- unique(x)) < nx) {
        # if (missing(ties))
        # warning("collapsing to unique 'x' values")
        y <- as.vector(tapply(y,match(x,x),ties))
        x <- ux
        stopifnot(length(y) == length(x))
    }
    }
    list(x=x, y=y)
}, ns="stats", envir = as.environment("package:stats"))
...