Одной приятной особенностью 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
- векторы, возможно различной длины и неизвестных типов / классов, - существует ли канонический способ получения нового набора векторов, которые перерабатываются в соответствии со стандартными правилами переработки? ? В частности, я не могу предположить, что шаг «сделать что-то» сам по себе сделает правильную переработку, поэтому мне нужно сделать это самому заранее.