Предположим, у меня есть два вектора. Предположим далее, что я хотел бы, чтобы моя функция принимала только одно значение каждого вектора и возвращала мне выходные данные. Затем я хотел бы, чтобы другая функция проверяла значения каждого прогона. Если результат предыдущего прогона меньше, чем новый. Затем я хотел бы, чтобы моя функция остановилась и вернула мне все предыдущие значения. Моя оригинальная функция очень сложна (модели оценки). Поэтому я пытаюсь привести пример, чтобы объяснить мою идею.
Предположим, что у меня есть эти два вектора:
set.seed(123)
x <- rnorm(1:20)
y <- rnorm(1:20)
Затем я хотел бы написать функцию, которая принимает только одно значение каждого вектора и умножает их. Затем верните мне вывод. Затем я хотел бы, чтобы функция проверяла, меньше ли предыдущее умножение, чем новое. Если да, то остановись и верни мне все предыдущие умножения.
Я попробовал это: Однако эта функция принимает все значения сразу и возвращает мне список умножения. Я думал об использовании lapply, чтобы соответствовать одному элементу за раз, но я не знаю, как работать с условиями.
myfun <- function(x, y, n){
multi <- list()
for ( i in 1:n){
multi[[i]] <- x[[i]]*y[[i]]
}
return(multi)
}
myfun(x,y,10)
Вот еще одна попытка
x <- rnorm(1:20)
y <- rnorm(1:20)
myfun <- function(x, y){
multi <- x*y
return(multi)
}
Это первая функция. Я хотел бы запустить его элемент за элементом. Каждый раз я хотел бы, чтобы он возвращал мне только один результат умножения. Затем другая функция (функция-обертка) проверяет результат. Если второй выход первой функции (функция умножения) больше, чем первая, то остановите, в противном случае продолжайте.