2015-02-18 2 views
0

Итак, я создал матрицу B весов и вектор b порядка, в котором я хочу выбирать узлы.Простой для цикла для графика

Мои b=(3 5 1 2 4)

Теперь я хочу подвести веса, от вектора В, ребер я traversed.ie я хочу подвести

B[3,5]+B[5,1]+... 

Так что я сказал:

for(i in 1:n-1){ 
    s=sum(B[b[i],b[i+1]])  
} 
s 

, но все это производит выводится как например:

[1] 1 

Я сделал что-то глупое?

+0

Что содержимое матрицы 'B' (вы можете опубликовать' dput (B) ' , и что такое 'n'? (то есть, как мы знаем,' 1' - не правильный ответ?) –

+0

Для начала вы, вероятно, захотели 1) установить 's = 0' перед циклом, 2) изменить строку к 's = s + ...' в цикле и 3) изменить '1: n-1' на' 1: (n-1) '(иначе вы получите' 0,1 ... n-1' а не '1,2 ... n-1' –

+0

@DavidRobinson Итак, у меня есть B как: 'matrix (c (12,5, 8,0,11,11,1,13,1,15,14, 4,14,12,12,1,7,8, 8,13,5, 0,14,3,14), nrow = 5) ' и' n = nrow (B) ' Я могу сказать, что 1 неверно, просто глядя на B (да опубликовали это заранее). Спасибо за подсказку с (n-1), я этого не знал! Что вы имеете в виду, когда говорите 's = s + ...'? Поскольку я должен определить 's' заранее, не имея предшествующего значения. И да, цикл for, кажется, ничего не делает, поскольку теперь я просто получаю s = 0 – misterE

ответ

1

Вы можете попробовать:

sum(B[cbind(head(b,-1),b[-1])]) 

И FYI, ваша петля должна быть:

s = 0 
for(i in 1:n-1){ 
    s=s + B[b[i],b[i+1]]  
} 
Смежные вопросы