2015-01-23 5 views
0

Я как бы новичок в R, но у меня есть некоторый опыт работы с Java. В Java я использовал для кодирования с для петель в другой для-петли, но я заметил, что это не работает так же, как в R.Как использовать цикл for внутри цикла в R

p <- 11 
diags <- list(rep(0.30, p), rep(0.45, p), rep(0.25, p)) 
Matrix <- as.matrix(bandSparse(p, k = -c(-1:1), diag = c(diags), symm=FALSE)) 
Matrix[1,1] <- 0.70 
Matrix[11,11] <- 0.75 

vector <- rep(0, 11) 
vector[5] <- 1 
vector 

for(i in 1:240){ 
    e <- vector %*% (Matrix %^% i) 
    for(j in 2:24){ 
     cumulativeSum <- cumulativeSum + e[j] 
    } 
} 

Я хочу, чтобы пройти через секунду-петли для каждого умножения матрицы, которое выполняется в первом for-loop. Я пробовал несколько вещей без желаемого результата, и я надеюсь, что кто-то может помочь мне в этом.

+0

Где вы инициализируете 'cumulativeSum'? Кроме того, R не похож на Java. Петли уровня R обычно являются наименее эффективным способом достижения чего-то. Вместо этого предпочтительными являются векторизованные функции, то есть петли уровня C. – Roland

+0

Простите, что я не опубликовал инициализацию cumulativeSum. В моем коде он установлен в ноль: cumulativeSum <- 0 – Pirlo

+1

Каков результат, которого вы хотели? Каковы ошибки? Как вы знаете, что это неверно? и т. д. См. [здесь] (http://stackoverflow.com/help/how-to-ask) –

ответ

2

Прежде всего, насколько я понимаю, e - это матрица 1x11, поэтому прохождение через нее с индексом 2:24 странно.

Во-вторых, поскольку это одна строка по номерам, то sum() работать, не нужно ее прокручивать.

for(i in 1:240){ 
    e <- vector %*% (Matrix %^% i) 
    cumulativeSum <- cumulativeSum + sum(e) 
} 
Смежные вопросы