Я определяю класс функции 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.