Вектор R теряет один компонент при передаче

#r

#r

Вопрос:

 recursiveCall <- function(x, N)
{
    cat("length = ", length(x))
    cat("vector x = ", x[1:2^N], "n")
    return (x)
}
PaulLevyBrownianMotion <- function(N)
{
    cat("Paul Levy construction for N = ", N, "n")
    W = c(rnorm(2^N 1, 0, 1))
    cat("length = ", length(W))
    cat("Wstandard = ", W, "n")
    W <- recursiveCall(W[1:2^N 1], N)
    return (W) 
}
  

Мой вектор W, похоже, потерял свой первый компонент при передаче другой функции. Не могли бы вы помочь мне с этим? Вот результат.

 > W = PaulLevyBrownianMotion(2)
Paul Levy construction for N =  2 
length =  5Wstandard =  0.08641454 1.616638 -0.8747996 0.6149899 0.2689501 
length =  4vector x =  1.616638 -0.8747996 0.6149899 0.2689501 
> 
  

Комментарии:

1. Вероятно, это связано с тем, что оператор двоеточия : имеет приоритет над . Попробуйте использовать скобки при построении W[1:(2^N 1)]

2. @Andrie: d’oh, одновременный пост. Подтверждено в R.

3. Мне интересно, почему вы не используете функцию R Recall ?

Ответ №1:

W[1:2^N 1] не индексирует то, что вы думаете, из-за приоритета. Сначала 1:2^N создается вектор, а затем 1 добавляется скаляр (поэтому каждый элемент увеличивается на единицу), в результате чего выбираются элементы от 2 до конца.

Комментарии:

1. так что, я думаю, я должен написать, как сказал Андри, будучи W[1:(2 ^ N 1)] . Большое спасибо за все ваши ответы, я попробую это прямо сейчас.

2. Правильно, решение Андри будет индексировать нужные вам элементы. Для конкретного случая, который вы опубликовали, на самом деле, достаточно просто передать W , потому W что определено с длиной 2^N 1 .