Проблема с передачей объекта

#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. Спасибо за помощь. Однако, поскольку моя функция должна быть рекурсивной в конце, я думаю, это не сработает. Я отредактировал свой код с помощью лучшего кода, если вы не возражаете взглянуть 🙂