Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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 Lappy Points通过psp对象列表绘制线_R_Spatstat - Fatal编程技术网

R Lappy Points通过psp对象列表绘制线

R Lappy Points通过psp对象列表绘制线,r,spatstat,R,Spatstat,现在,由于@Phil,我已经成功地将SpatialLinesDataFrame强制转换为psp对象列表,我需要使用SpatStat函数pointsOnLines沿每个列表项(即线)创建点,并将线的标记转移到每组点 我是Lappy的新手,但是看到它是如何被用于将spatialdataframe转换为psp对象列表的,我认为使用它将pointsOnLines函数应用于每个列表是合适的?唉,这对我不起作用。救命啊 要继续fylk示例 library("maptools") library("rgdal

现在,由于@Phil,我已经成功地将SpatialLinesDataFrame强制转换为psp对象列表,我需要使用SpatStat函数pointsOnLines沿每个列表项(即线)创建点,并将线的标记转移到每组点

我是Lappy的新手,但是看到它是如何被用于将spatialdataframe转换为psp对象列表的,我认为使用它将pointsOnLines函数应用于每个列表是合适的?唉,这对我不起作用。救命啊

要继续fylk示例

library("maptools")
library("rgdal")
library("spatstat")

base_dir <- system.file("shapes", package = "maptools")
fylk <- readOGR(base_dir, "fylk-val")

is(fylk)

out <- lapply(fylk@lines, function(i) { lapply(i@Lines, as.psp) })
out

dat <- fylk@data
for (i in seq_along(1:nrow(dat))) {
  out[[i]] <- lapply(out[[i]], "marks<-", value = dat[i, , drop = FALSE])
}

for(i in seq_along(out)){
  abc[[i]]<-(lapply(out[[i]],function(i){pointsOnLines(out[[i]],eps=10)}))
}
库(“maptools”)
图书馆(“rgdal”)
图书馆(“spatstat”)

BaseIdir < P>假定最后的<代码> LePix<代码>是您的问题,考虑嵌套的<代码> LePix<代码>,将结果分配给<代码> ABC < /代码>:

abc <- lapply(out, function(o)
           lapply(o, function(x) pointsOnLines(x, eps=10))
           # EQUIVALENTLY:
           # lapply(o, pointsOnLines, eps=10)
       )
多个psp和ppp对:

proc_plot <- function(X, Y) {
    plot(X, main="")
    plot(Y, add=TRUE, pch="+")
}

result <- Map(proc_plot, out, abc)

proc\u绘图这不起作用。。。这对我们没有帮助。错误或不期望的结果是什么?我看到您从未初始化过
abc
,您正在匿名函数中传递
out[[I]]
。请记住,
i
在传递到
function()
时成为要使用的对象。另外,您在
for
lappy
循环中都在使用
i
。您使事情变得比必要的更复杂。请参阅我对上一个问题的回答,并将这些行变成
linnet
。然后,您可以直接访问spatstat函数,以生成网络上的点等。查看spatstat中称为lpp和线的函数。最好的参考是斯帕塔特书的第17章。从我的手机上写信,所以无法为你查找所有的名字。查看
linnet
lpp
的帮助文件以及其中对其他函数的引用。祝你好运。@EgeRubak“linnet”类的对象表示二维直线段网络。我没有直线段,但有非常弯曲的圆弧。因此,我认为你的建议对我没有帮助。我错了吗?@Parfait您是对的,我将在将来提供收到的错误。我对R很陌生,自学成才,所以这是一个陡峭的学习曲线。下面发布的解决方案确实运行了,但并不是预期的结果。我需要一个psp对象的点沿线包含在一个列表对象。运行您提供的代码,然后尝试绘制结果时收到的错误代码是…
xy中的错误。coords(x,y,xlabel,ylabel,log):“x”是一个列表,但没有组件“x”和“y”
psp和SpatialLines对象也只是直线段,如linnet。您可以在这些类中表示相同的行。linnet的优势在于,它知道哪些线段在交叉点连接,并允许路径从一个线段到另一个线段。典型的曲线弧由许多粘在一起的小直线表示。这三个类都可以表示。如果你的曲线不是由直线集合表示的,那么你在spatstat中的任何东西都是不走运的(我相信一般来说是R)。有了上述错误,你是如何绘制的?您是否在中绘制了每个示例的psp和ppp对象?您需要这样做,因为
abc
元素首先从
out
列表分层。参见扩展答案。
proc_plot <- function(X, Y) {
    plot(X, main="")
    plot(Y, add=TRUE, pch="+")
}

result <- Map(proc_plot, out, abc)