Я делаю графики потоков для моделей пространственного взаимодействия с координатами x-y как для источников, так и для пунктов назначения:
Проблема в том, что я продолжаю использовать вложенные циклы for (один для источников, один для пунктов назначения) для построения этих линий, и я уверен, что в R есть лучший способ.
В любом случае, чтобы помочь ответить на этот вопрос, я создал простой воспроизводимый пример с 4 источниками и 2 пунктами назначения. Подозреваю, что ответ на вопрос о более быстром построении лежит в матричной алгебре, но не уверен, с чего начать. Проверьте это и, пожалуйста, дайте мне знать:
o <- data.frame(x = c(3,5,6,1), y = c(8,2,3,2))
plot(o)
d <- data.frame(x = c(5,3), y = c(5,3))
points(d, col="red", pch=3)
beta <- 0.6
dist <- matrix(sqrt(c(o[,1] - d[1,1], o[,1] - d[2,1] )^2 +
c(o[,2] - d[1,2], o[,2] - d[2,2] )^2), ncol = 2)
s <- dist
for(i in 1:nrow(o)){
for(j in 1:nrow(d)){
s[i,j] <- exp(-beta * dist[i,j])
}
}
for(i in 1:nrow(o)){
for(j in 1:nrow(d)){
lines(c(o[i,1], d[j,1]), c(o[i,2], d[j,2]),
lwd = 2 * s[i,j] / mean(s))
}
}
Редактировать. Некоторый контекст этого проекта см. здесь http://rpubs.com/RobinLovelace/9697
for
можно заменить наs <- exp(-beta * dist)
- person Jilber Urbina   schedule 29.10.2013segments()
вместо строк? - person hadley   schedule 30.10.2013