Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中绘制不带for循环的线_R_For Loop_Plot_Lines - Fatal编程技术网

在R中绘制不带for循环的线

在R中绘制不带for循环的线,r,for-loop,plot,lines,R,For Loop,Plot,Lines,我正在为空间交互模型绘制流程图,其中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

我正在为空间交互模型绘制流程图,其中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))
  }  
}

o替换第二个循环的方法是使用
mapply

fun <- function(row.o, row.d)
{
 lines(c(o[row.o,1], d[row.d,1]), c(o[row.o,2], d[row.d,2]), 
         lwd = 2 * s[row.o,row.d] / mean(s))
}

#all combinatios of rows of `d` and `o` 
args.od <- expand.grid(1:nrow(o), 1:nrow(d))

mapply(fun, row.o = args.od[,1], row.d = args.od[,2])

fun你的第一个
for
循环可以被
s替换啊是的-第一个循环是作为s的更复杂定义的遗迹存在的,例如:s使用
segments()
而不是行?