Правя диаграми на потока за модели на пространствено взаимодействие, с координати 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