Имея вектор x, мне нужно его рекурсивно изменить во внутренней функции. Вот моя реализация этого где я ма с использованием <<-
глобального оператора присваивания:Рекурсивная функция без использования << - присвоение?
outer <- function(){
x <- rep(1,5)
inner <- function(i){
if(i> length(x))return(x)
x[i] <<- 2 ## don't work with <-
inner(i+1)
}
inner(1)
}
outer()
[1] 2 2 2 2 2
Мой вопрос, если есть другой/лучше реализацию, избежать использования <<-
? Обратите внимание, что я не хочу заменять рекурсию, но просто спросить, есть ли лучший/более безопасный дизайн?
Как насчет 'x [i] <- inner (i)' и убедитесь, что 'inner' возвращает то, что вы хотите? oops - Я вижу, что этого недостаточно, если вы действительно хотите что-то сделать с помощью 'x', так как прямо сейчас он не возвращается из' outer' –
@CarlWitthoft спасибо! Ваша «внутренняя» все еще является «рекурсивной функцией»? – agstudy
Если я запускаю только ваш 'inner' с помощью' x [i] <- 2', я успешно получаю обновленные значения 'x' в среде консоли. Поэтому я думаю, что все, что вам нужно сделать, это «внешний» возврат 'x' для вас. –