При работе с рекурсивными уравнениями в математике принято писать уравнения, которые выполняются в некотором диапазоне k = 1,...,d
с неявным соглашением о том, что если d < 1
, то система уравнений считается пустой.При программировании на R
я хотел бы иметь возможность писать циклы for
таким же образом, как математическое утверждение (например, рекурсивное уравнение), чтобы он интерпретировал диапазон с верхней границей ниже нижней границы как пустой,Это гарантировало бы, что синтаксис алгоритма имитирует синтаксис математического оператора, на котором он основан.
К сожалению, R
не интерпретирует цикл for
таким образом, и поэтому это обычно приводитк ошибкам, когда вы программируете свои циклы таким образом, чтобы имитировать основную математику.Например, рассмотрим простую функцию, в которой мы создаем вектор нулей длиной n
, а затем меняем первые значения d
на значения, используя цикл над элементами в диапазоне k = 1,...,d
.Если мы введем d < 1
в эту функцию, мы бы хотели, чтобы функция распознала, что цикл должен быть пустым, чтобы мы могли получить вектор всех нулей.Однако, используя стандартный цикл for
, мы получаем следующее:
#Define a function using a recursive pattern
MY_FUNC <- function(n,d) {
OBJECT <- rep(0, n);
for (k in 1:d) { OBJECT[k] <- 1 }
OBJECT }
#Generate some values of the function
MY_FUNC(10,4);
[1] 1 1 1 1 0 0 0 0 0 0
MY_FUNC(10,1);
[1] 1 0 0 0 0 0 0 0 0 0
MY_FUNC(10,0);
[1] 1 0 0 0 0 0 0 0 0 0
#Not what we wanted
MY_FUNC(10,-2);
[1] 1 1 1 1 1 1 1 1 1 1
#Not what we wanted
Мой вопрос: Есть ли в R
какая-либо функция, которая выполняла бы циклы, такие как цикл for
,но интерпретирует цикл как пустой, если верхняя граница ниже, чем нижняя граница?Если функции не существует, есть ли способ запрограммировать R
на чтение циклов таким образом?
Обратите внимание: Я не ищу ответы, которые просто переписывают этот пример функциитаким образом, что удаляет петлю.Я знаю, что это можно сделать в данном конкретном случае, но моя цель - сделать цикл более общим.Этот пример показан только для того, чтобы дать четкое представление о явлении, с которым я имею дело.