#r
#r
Вопрос:
Я новичок в «R», и у меня проблема с изменением переменной. Вот мой код :
recursiveCall <- function(x, N)
{
x[2^(N-1) 1] <- x[2^(N-1) 1] (x[1] x[2^N 1] ) / 2
if (N>1) {
recursiveCall(x[1..2^(N-1) 1], N-1)
recursiveCall(x[2^(N-1) 1..N], N-1)
}
#cat("Wmodif = ", x, "n")
}
PaulLevyBrownianMotion <- function(N)
{
cat("Paul Levy construction for N = ", N, "n")
W = rnorm(2^N 1, 0, 1)
W[1] <- 0
cat("Wstandard = ", W, "n")
recursiveCall(W, N)
return (W)
}
Но W не запоминает изменения в последовательном recursiveCall. Что я должен написать, чтобы вторая строка была похожа на третью в выходных данных? Также, если у вас есть какие-либо предложения по моему коду, я буду рад их услышать.
Вот что я пытаюсь сделать с первым ответом :
recursiveCall <- function(x, N)
{
x[2^(N-1) 1] <- x[2^(N-1) 1] (x[1] x[2^N 1] ) / 2
if (N>1) {
x[1:2^(N-1) 1] <- [recursiveCall(x[1:2^(N-1) 1], N-1)
x[2^(N-1) 1:2^N] <- recursiveCall(x[2^(N-1) 1:2^N], N-1)
}
#cat("Wmodif = ", x, "n")
return x
}
PaulLevyBrownianMotion <- function(N)
{
cat("Paul Levy construction for N = ", N, "n")
W = rnorm(2^N 1, 0, 1)
W[1] <- 0
cat("Wstandard = ", W, "n")
W <- recursiveCall(W, N)
return (W)
}
Спасибо, Нильс
Комментарии:
1.
?"<<-"
может быть тем, что вы ищете.2. возможно, я не знаю, как это использовать
3. <<- должно не быть тем, что он ищет.
4. В вашей модификации первого ответа у вас есть дополнительное «[» в первой строке внутри
if
инструкции, непосредственно передrecursiveCall
иreturn()
— это функция, вам нужно передать ей x,return(x)
. Вы можете заставить рекурсию работать таким образом.
Ответ №1:
Аргументы передаются по значению в R (об этом можно сказать больше, но это будет работать в качестве основы). Таким образом, их изменение внутри функции не изменяет их «внешнюю» версию. Для того, что вы хотите, измените
recursiveCall <- function(x, N)
{
x[2^(N-1) 1] <- x[2^(N-1) 1] (x[1] x[2^N 1] ) / 2
cat("Wmodif = ", x, "n")
return(x)
}
И затем вы используете это как:
PaulLevyBrownianMotion <- function(N)
{
cat("Paul Levy construction for N = ", N, "n")
W = rnorm(2^N 1, 0, 1)
W[1] <- 0
cat("Wstandard = ", W, "n")
W<-recursiveCall(W, N)
return (W)
}
Комментарии:
1. Спасибо за помощь. Однако, поскольку моя функция должна быть рекурсивной в конце, я думаю, это не сработает. Я отредактировал свой код с помощью лучшего кода, если вы не возражаете взглянуть 🙂