Был ли удален plot.ACF с внешнего интерфейса NLME?Или я изменил некоторые настройки случайно? - PullRequest
1 голос
/ 26 марта 2019

Я использую R для анализа линейной модели смешанных эффектов (nlme :: lme). Я хочу построить значения ACF пунктирной линией на уровне альфа (как plot.ACF).

После I require(nlme) я могу запустить ACF, но plot.ACF по-прежнему недоступен. Я могу получить к нему доступ через nlme:::plot.ACF, то есть он обозначен как скрытая функция. Была ли эта особенность пакета отложена по какой-то причине? Если нет, есть ли другое вероятное объяснение? Кто-нибудь знает способ, которым я могу заставить пакет экспортировать его (даже после обновления)?

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Насколько я могу судить, функция plot.ACF никогда не экспортировалась. Самая ранняя версия nlme из https://cran.r -project.org / src / contrib / Archive / nlme / , которую я смог найти в файле NAMESPACE, была nlme_3.1-40 (дата: 2003-05-16 ), и эта функция была бы невидимой (на консоли). Он по-прежнему был бы доступен с помощью функции methods, а код был бы доступен с помощью механизма тройных точек (:::) или getAnywhere.

getAnywhere("plot.ACF")  Retruns formal parameters, funciton body and information about functions environment
getS3method("plot", "ACF")  # returns same code as getAnywhere

x <- methods(class="ACF")
str(x)
#--------------
 'MethodsFunction' chr "plot.ACF"
 - attr(*, "info")='data.frame':    1 obs. of  4 variables:
  ..$ visible: logi FALSE
  ..$ from   : Factor w/ 1 level "registered S3method": 1
  ..$ generic: chr "plot"
  ..$ isS4   : logi FALSE
 - attr(*, "byclass")= logi TRUE

Я прошу прощения за мой более ранний, несколько странный комментарий, потому что, перечитывая ваше сообщение, вы понимаете, что функции доступны, но не видны. До сих пор неясно, почему вы думали, что это когда-либо было видно.

Если вы хотите экспортировать plot.ACF, вы можете добавить его в список экспортируемых функций в файле NAMESPACE и пересобрать пакет. Или вы можете экспортировать на лету с:

plot.ACF <- getAnywhere("plot.ACF")
1 голос
/ 26 марта 2019

Да, он скрыт от внешнего интерфейса пакета nlme (т. Е. Не экспортируется);Я не знаю, является ли это изменением.

> nlme::plot.ACF
Error: 'plot.ACF' is not an exported object from 'namespace:nlme'

Однако вы можете получить доступ к справке для него, используя ?plot.ACF, где оно демонстрирует следующее использование:

## S3 method for class 'ACF'
plot(x, alpha, xlab, ylab, grid, ...)

Обратите внимание, что не предлагается использовать plot.ACF, а вместо этого просто plot.Это работает, потому что функция plot является объектно-ориентированной, поэтому будет вызывать plot.ACF за кулисами всякий раз, когда plot вызывается для объекта ACF.

То есть, чтобы построить объект ACF, вам нужно просто набрать plot, а не plot.ACF.

...