Необходимо предварительно обработать ввод в функции - PullRequest
0 голосов
/ 14 ноября 2018

Я пишу пакет с набором функций, которые принимают объекты, подходящие для модели (например, вывод из пакетов "lmt", "lavaan" или "mirt"), и вычисляют соответствующие индексы на основе этих моделей.

Первое, что делает КАЖДАЯ функция в этом наборе, - это преобразовывает ввод в стандартизированную форму, поэтому все мои функции выглядят так:

fooIndex <- function(x) {
  x <- standardizerFunction(x)
  # Now, compute the fooIndex
}

Здесь standardizerFunction - это универсальная функция S3, котораяимеет методы для всех поддерживаемых входных классов.

Есть ли лучший способ реализовать эту функцию, чем вызывать standardizerFunction внутри каждой из функций, вычисляющих индексы?

РЕДАКТИРОВАТЬ: я просто хотел указать, чтоМоя «проблема» в том, что копирование и вставка одной и той же строки кода в ~ 20 различных функций кажется плохим стилем программирования, и я надеюсь на лучшее решение.

1 Ответ

0 голосов
/ 15 ноября 2018

Исходя из того, что написали Йод и Грегор, есть два способа справиться с этим:

(1) Требовать от пользователя применения функции standardizer перед запуском любой из основных функций. Функции будут выдавать ошибку, если вход неправильного класса.

(2) Поскольку наши функции будут проверять ввод, чтобы убедиться, что он в любом случае принадлежит к нужному классу, просто сложите функцию standardizerFunction в часть проверки ввода, используя что-то вроде:

if(!inherits(x, what="YourClass")) standardizerFunction(x)

В моем конкретном случае, поскольку большинству моих пользователей неудобно с R, просить их предварительно применить функцию standardizerFunction не лучший выбор, поэтому я использую вариант 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...