[英]Create a list object in a loop in R
我正在嘗試在循環中創建點模式列表ppp.object {spatstat}。 我的數據集如下所示:
> names(OT1);head(OT1);dim(OT1)
[1] "EID" "latitude" "longitude" "month" "year" "CPUE" "TSUM"
[8] "fTSUM"
EID latitude longitude month year CPUE TSUM fTSUM
1 167-1-1996-1135 67.70000 -61.81667 9 1996 0 0 F
2 167-10-1996-1135 67.71667 -59.18333 9 1996 0 0 F
3 167-100-1996-1135 67.86667 -59.43333 10 1996 0 0 F
4 167-101-1996-1135 67.95000 -59.58333 10 1996 0 0 F
5 167-102-1996-1135 68.10000 -59.76667 10 1996 0 0 F
6 167-103-1996-1135 67.81667 -59.38333 10 1996 0 0 F
[1] 2707 8
我想做的是為我的每個月選擇數據並創建一個ppp.object。
> sort(unique(OT1$month))
[1] 7 8 9 10 11 12
以下循環有效,我可以看到我的每個數字:
for(i in sort(unique(OT1$month))){
a<-OT1[OT1$month==i,]
b<-ppp(a$longitude,a$latitude,marks=a$fTSUM,window=newW)
plot(b,main=i)
}
我想創建一個我可以單獨訪問的所有ppp.object的列表,我已嘗試在循環命令中添加list()但沒有任何成功...任何幫助將不勝感激!
謝謝!
這似乎很適合lapply
:
pppList <- lapply(sort(unique(OT1$month)), function(i) {
a<-OT1[OT1$month==i,]
ppp(a$longitude,a$latitude,marks=a$fTSUM,window=newW)
})
...但只是為了解釋如何修復你的循環:
您需要有一個要分配的列表。 創建一個正確的長度始終是一個好主意:
x <- sort(unique(OT1$month))
pppList <- vector('list', length(x))
for(i in x) {
a<-OT1[OT1$month==i,]
b<-ppp(a$longitude,a$latitude,marks=a$fTSUM,window=newW)
pppList[[i]] <- b
plot(b,main=i)
}
以下是否適合您?
library(plyr)
dlply(OT1, .(month), function(a) ppp(a$longitude,a$latitude,marks=a$fTSUM))
您應首先創建一個正確長度的空列表,然后依次將每個ppp
對象分配給該列表中的一個插槽。
ind <- sort(unique(OT1$month))
b <- vector("list", length(ind))
for(i in 1:length(ind)){
a <- OT1[OT1$month == ind[i],]
b[[i]] <- ppp(a$longitude,a$latitude,marks=a$fTSUM,window=newW)
plot(b[[i]],main=ind[i])
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.