R: Поиск помощи для классов, созданных пакетами

Часто кажется, что пакеты R содержат несколько функций, которые создают объект некоторого class, указанного в пакете, с универсальным или неуниверсальным methods, которые применяются ко всем объектам этого класса. Хотя обычно легко узнать о функциях в пакете, я не нашел столь же простого способа найти точное описание самого class для классов S3. Я думаю, что это, по крайней мере, частично преднамеренно. Определения классов можно рассматривать как своего рода внутреннюю работу, о которой, с одной стороны, не должен думать пользователь, а с другой стороны, создатель пакета может изменять ее, не желая, чтобы люди на нее полагались.

Однако я обнаружил, что иногда мне нужно создать дополнительные объекты того же class, которые работают с функциями пакета, которые являются методами для этого class. И не всегда легко вывести, какими характеристиками должен обладать объект, чтобы его можно было использовать пакетными функциями, которые делают разные вещи с объектами этого class, тем более что экземпляры, созданные разными функциями, могут иметь или не иметь абсолютно одинаковую структуру.

Примером, с которым я сейчас борюсь, являются объекты forecast, созданные различными функциями пакета forecast. Пакет прогноза предоставляет большое количество функций, которые используют объекты прогноза в качестве входных данных. В этом сообщении в блоге Роба Хайндмана описывается функция перекрестной проверки, для которой требуется объект класса forecast как аргумент В документации к функции tsCV говорится, что в качестве аргумента она принимает прогнозную функцию, которая должна возвращать объект класса forecast и иметь одномерный временной ряд в качестве своего первого объекта (предполагается, что это прогнозы) и иметь аргумент h, указывающий горизонт. Что ж, это звучит достаточно просто. Но затем в соответствующем учебнике Хайндмана, раздел 3.6, мы сказано, что объекты прогноза содержат информацию о методе прогнозирования, данных, точечных прогнозах, интервалах прогнозирования, остатках и подогнанных значениях. Это много вещей, и я не уверен, все ли они обязательны, или некоторые из них необязательны, или требуются только в том случае, если вы собираетесь использовать определенные методы. И я ничего не знаю об обязательной внутренней структуре класса.

Наконец, я особенно хочу знать, использует ли новый пакет fable, предназначенный для замены пакета прогноза, тот же механизм класса прогноза и ту же внутреннюю структуру, или, если нет, чем они отличаются. Мне не удалось найти в fpp3 или где-либо еще что-либо, описывающее изменение или содержащее сопоставимое описание объектов class forecast.

Мне будет неловко, если будет какая-то простая функция,

you_should_know_this_dummy(package = “forecast”, class = “forecast”),

который возвращает подробное описание класса. Но я искал такую ​​функцию всеми возможными способами и не нашел.


person andrewH    schedule 10.12.2020    source источник
comment
Я думаю, самое близкое, что вы могли бы сделать, это dput или str объект класса. R, конечно же, не навязывает документацию класса S3, и фактически строка кода z <- structure(list(x = 1, y = 2), class = "blah") создает одноразовый объект нового класса S3, который нигде не имеет хорошего описания.   -  person Allan Cameron    schedule 10.12.2020
comment
Нет формального требования документировать классы S3, поэтому ничего не применяется. Каждый разработчик пакетов может делать все, что ему заблагорассудится, поэтому не может быть единого способа, работающего для всех пакетов и классов. Так что ответить на вопрос в общем смысле невозможно. Если автор пакета не предоставляет документацию, лучшее, что вы можете сделать, это перепроектировать, но это потенциально хрупко. Возможно, свяжитесь с разработчиком, чтобы попросить разъяснений.   -  person MrFlick    schedule 10.12.2020


Ответы (1)


О.К., мой плохой. Я так старался найти способ найти файл справки для описания класса (которого, я думаю, не существует), что упустил из виду наличие довольно хорошего описания class forecast в функции forecast() в руководстве для пакета. forecast. Вот:

An object of class "forecast" is a list usually containing at least the following elements:
model     A list containing information about the fitted model
method    The name of the forecasting method as a character string
mean      Point forecasts as a time series
lower     Lower limits for prediction intervals
upper     Upper limits for prediction intervals
level     The confidence values associated with the prediction intervals
x         The original time series (either object itself or the time series used to create the model stored as object).
residuals  Residuals from the fitted model. For models with additive errors, the residuals will be x minus the fitted values.
fitted    Fitted values (one-step forecasts)

Это по-прежнему оставляет некоторые вопросы без ответа, такие как формат аргумента информации о модели model и аргумента x для многомерных моделей. Но я надеюсь, что они аналогичны тем, что переданы или возвращены, например, lm(). Я думаю, что это дает мне достаточно, чтобы начать работу и надеяться на информативные ошибки.

Я до сих пор не знаю, использует ли пакет fable также объекты class forecast. Пакет forecast документирует функцию forecast() как универсальную. Пакет fable не документирует дженерик, хотя имеет очень похожий список функций, похожих на methods, например, forecast.whatever. Если я найду ответ, я опубликую его здесь.

Я также ищу ряд других пакетов, которые обеспечивают прогноз временных рядов определенных типов. Я надеюсь, что они обеспечивают вывод, достаточно похожий, чтобы я мог использовать функции прогноза/басни для отображения, перекрестной проверки и так далее. Посмотрим.

person andrewH    schedule 11.12.2020