簡體   English   中英

R通過psp對象列表應用Lpointly PointsOnLines

[英]R Lapply PointsOnLines thru a list of psp objects

現在,由於@Phil,我已經成功地將SpatialLinesDataFrame強制轉換為psp對象列表,因此,我需要使用SpatStat函數pointsOnLines沿每個列表項(即Line)創建點,並在其上標記線轉移到每組點。

我不是lapply的新手,但是看到它是如何在將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)}))
}

這行不通,而且我無法解決原因。 我用[[]]是列表列表嗎?

對新手的建議?

假設最后一個lapply是您的問題,請考慮使用嵌套的lapply將結果分配給abc

abc <- lapply(out, function(o)
           lapply(o, function(x) pointsOnLines(x, eps=10))
           # EQUIVALENTLY:
           # lapply(o, pointsOnLines, eps=10)
       )

並根據文檔進行繪圖,請在outabc列表之間使用Map運行elementwise循環(將包裝器包裝為mapply )。

一副psp和ppp:

plot(out[[1]], main="")
plot(abc[[1]], add=TRUE, pch="+")

多個psp和ppp對:

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

result <- Map(proc_plot, out, abc)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM