2012-03-09 8 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のリストを作成したいと思い、私が試してみたがloopコマンドにlist()を追加しましたが、何の成功もありませんでした...どんな助けでも大歓迎です!

ありがとうございました!

+0

* *ここで、R-助けとの間でクロスポストしないでください。悪いカルマ。 –

+2

@DirkEddelbuettel - なぜですか?ここで[R]タグを頻繁に使う人は誰もRヘルプの信者ですか?私にとっては全く別の2つのコミュニティのようだ。 – eykanal

+0

@eykanal私は、ほとんどのRタグがSOの少なくともR-helpに潜んでいることを賭けても構わないと思います。 – joran

答えて

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

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

あなたのご提案ありがとうございました。 – GodinA

2

次の機能はありますか?

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

@jmsignerありがとうございます。 – GodinA

関連する問題