Одна приятная особенность R, связанная с присущей ей векторизованной природе, - это правило утилизации, описанное в разделе Введение в R в разделе 2.2.
Векторы, встречающиеся в одном выражении, не обязательно должны иметь одинаковую длину. Если это не так, значение выражения представляет собой вектор с той же длиной, что и самый длинный вектор, который встречается в выражении. Более короткие векторы в выражении перерабатываются так часто, как нужно (возможно, дробно), пока они не совпадут с длиной самого длинного вектора. В частности, константа просто повторяется.
Большинство стандартных функций используют это, но код, который делает это, похоронен в базовом C-коде.
Существует ли канонический способ реализации стандартных правил утилизации для функции полностью в R-коде? То есть, учитывая такую функцию, как
mock <- function(a, b, c) {
# turn a, b, and c into appropriate recycled versions
# do something with recycled a, b, and c in some appropriately vectorized way
}
где a
, b
и c
- векторы, возможно, различной длины и неизвестных типов/классов, существует ли канонический способ получить новый набор векторов, которые перерабатываются в соответствии со стандартными правилами утилизации? В частности, я не могу предположить, что шаг "сделать что-то" будет выполнять надлежащую переработку, поэтому мне нужно сделать это заранее.