Проверить, возвращает ли функция вывод длины ввода - PullRequest
1 голос
/ 27 мая 2020

Я определяю класс функции S4, чтобы гарантировать, что длина вывода равна длине ввода (вроде как один к одному, но не в смысле исчисления), например,

EqLenOut <- setClass("EqLenOut", contains = "function")
.EqLenOut.validity <- function(object) {
  msg <- NULL
  if (length(formals(object)) > 1) {
    msg <- c(msg, "EqLenOut must only have one argument.")
  }
  tst1 <- length(object(1:5)) != 5
  tst2 <- length(object(1:6)) != 6
  if (tst1 || tst2) {
    msg <- c(msg, "EqLenOut output length must equal input length.")
  }
  msg
}
S4Vectors::setValidity2("EqLenOut", method = .EqLenOut.validity)

Он работает, но тестировать функцию для двух произвольных чисел c несовершенно. В моем конкретном случае мне также потребуются числовые c входы и выходы. Однако было бы неплохо настроить общий класс «равного вывода», который мог бы содержать как равные числовые c, так и нечисловые c функции.

Как лучше (строго & эффективно) проверить, равна ли длина вывода функции длине ввода, независимо от ввода / вывода?

Если есть имя для классов функций, которые принимают входной вектор длины n и вернуть выходной вектор длины n, я бы хотел сделать заголовок вопроса более конкретным c.

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