2012-03-09 114 views
2

我试图在循环中创建一个点模式ppp.object {spatstat}的列表。 我的数据集是这样的:在R循环中创建一个列表对象

> 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(),但没有任何成功...任何帮助将不胜感激!

谢谢!

+0

请不要在r-help和here之间使用* crosspost。恶业。 – 2012-03-09 15:53:29

+2

@DirkEddelbuettel - 为什么不?在这里经常使用[R]标签的每个人是否也是R-help的追随者?这对我来说似乎是两个完全不同的社区。 – eykanal 2012-03-09 16:15:13

+0

@eykanal我愿意打赌,几乎每个R标签都至少潜伏在R-help上。 – joran 2012-03-09 16:18:47

回答

8

这似乎是一个不错的选择为lapply

pppList <- lapply(sort(unique(OT1$month)), function(i) { 
    a<-OT1[OT1$month==i,] 
    ppp(a$longitude,a$latitude,marks=a$fTSUM,window=newW) 
}) 

...但只是为了说明如何解决您的for循环:

您必须分配给一个列表。和创建正确长度的始终是性能不错的主意:

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) 
} 
+0

谢谢汤米!我正在努力如何编写列表功能!这工作完美。 – GodinA 2012-03-09 16:18:20

1

,必须先创建正确的长度的空列表,然后每个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]) 
} 
+0

谢谢@joran的建议。 – GodinA 2012-03-09 16:38:13

2

请问以下情况适用于您?

library(plyr) 
dlply(OT1, .(month), function(a) ppp(a$longitude,a$latitude,marks=a$fTSUM)) 
+0

谢谢@ jmsigner的建议。 – GodinA 2012-03-09 16:37:59