У нас есть пакет R для определенной цели.Базовая структура данных - это корреляционная функция , которая представляет собой функцию с действительными / комплексными значениями для небольшого (100) числа (T) временных интервалов.У нас есть несколько измерений (N) этого, поэтому в его основе это матрица N × T.Но есть и другие вещи, которыми он может стать:
Можно загрузить его с помощью R выборок так, чтобы он стал матрицей R × T.Однако мы хотим сохранить исходные данные, поэтому есть поле для матрицы R × T, а другое - для матрицы N × T.
Может быть симметризовано который сократит T пополам, а также изменит различные другие функции, которые работают с этими объектами.
Также он может быть смещен , который принимает разницу между последовательными элементами ипоэтому падает один раз срез.Тогда первый столбец в матрице соответствует t = 1
, а не t = 0
, что становится важным в соответствии с данными.
Корреляционные функции могут иметь мнимую часть, этохранится в качестве второй реальной матрицы.Но они могут этого не делать.
При выполнении нелинейных операций с данными мы делаем это один раз со средним значением исходных данных и каждой выборки начальной загрузки.Если результатом является другая корреляционная функция, у этого объекта не будет «исходных данных», а будет только среднее значение.
Таким образом, в основном у нас есть класс, который может иметь различные поля и только среднее значениеисходные данные действительно распространены.
Что еще хуже, не существует формальной документации для возможных членов и связанных с ними инвариантов.Исходя из C ++, где краткое определение класса позволяет мне выполнять инкапсуляцию, система классов S3 в R выглядит как приглашение к несоответствиям.
Это возникало несколько раз, когда некоторые функции принимали такую функцию корреляции в качестве аргумента и ожидали некоторогоПоле присутствовать пока не было.Код пронизан строками, которые просто добавляют другое поле к классу при выполнении операции.
Короче говоря: существует ли какой-либо автоматически реализуемый способ в системе классов S3 иметь исчерпывающий список всех полей, которыекласс может иметь?Прямо сейчас я вижу только возможность документировать (на английском языке) в функции конструктора и просто надеюсь, что никто не пропустил строку, в которую были добавлены поля.