Jul 03, 2012 17:54
Помните, как там в анекдоте, про математика, которому поручили вскипятить полную кастрюлю воды? "Выливаем воду, а дальше всё так же, как для пустой кастрюли".
Сегодня потребовалась самая малость - инвертировать ковариацию в таблице при условии, заданном логическим вектором, вида:
> v1
[1] FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
То есть, если v1[i] != v1[j] - требуется преобразование, иначе - нет. Начал мучить, и решил всё через цикл:
m1<-matrix(1, nrow=10, ncol=10)
len <- length(v1)
for (i in 1:(len -1))
for (j in (i+1):len)
if (v1[i] != v1[j])
m1[j,i] <- m1[i,j] <- -m1[i,j]
И лишь под вечер сообразил, что всё решается то вообще элементарно:
m[v1,] <- -m[v1,]
m[,v1] <- -m[,v1]
Вот так и рождаются анекдоты про индусских программистов, видимо.
r project,
пособие по вкручиванию лампочек,
сломай себе моск