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

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

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


person jordan wingenroth    schedule 26.03.2019    source источник
comment
Не знаю, изменился он или нет, но поскольку он объектно-ориентированный, просто plot (который не скрыт) будет выполняться plot.ACF на любом объекте ACF.   -  person Aaron left Stack Overflow    schedule 26.03.2019
comment
Он не удален — вы всегда можете проверить CRAN самостоятельно, если вы не уверены   -  person QuishSwash    schedule 26.03.2019
comment
@Umaomamaomao, вопрос не в том, удалено ли оно, а в том, скрыто ли оно теперь (как в 3.1-137), и если да, то почему и что с этим делать.   -  person Aaron left Stack Overflow    schedule 26.03.2019
comment
@ Аарон, мне невероятно жаль. Сможешь ли ты когда-нибудь простить меня?   -  person QuishSwash    schedule 26.03.2019
comment
@Umaomamaomao: Я предполагаю, что ты шутишь, но в любом случае, конечно! :)   -  person Aaron left Stack Overflow    schedule 26.03.2019
comment
@ 42- Я думаю, это проблема терминологии; plot.ACF действительно не экспортируется в 3.1-137.   -  person Aaron left Stack Overflow    schedule 26.03.2019


Ответы (2)


Да, он скрыт от внешнего интерфейса пакета 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.

person Aaron left Stack Overflow    schedule 26.03.2019

Насколько я могу судить, функция plot.ACF никогда не экспортировалась. Самая ранняя версия nlme с https://cran.r-project.org/src/contrib/Archive/nlme/, который я смог найти в файле NAMESPACE, имел номер nlme_3.1-40 (дата: 16 мая 2003 г.), и эта функция была бы невидимой (на консоли). Он по-прежнему был бы доступен с помощью функции 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")
person IRTFM    schedule 26.03.2019
comment
Привет @42-, отличная детективная работа и отличный пример дружелюбия и гостеприимства по отношению к новым участникам, спасибо! - person Aaron left Stack Overflow; 27.03.2019