2012-03-09 2 views
2

Я пытаюсь создать список точечных шаблонов ppp.object {spartstat} в цикле. Мой набор данных выглядит следующим образом:Создайте объект списка в цикле в 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, что я могу получить доступ индивидуально, я пытался добавив список() в команду цикла, но без каких-либо успехов ... Любая помощь будет высоко оценена!

Спасибо!

+0

Пожалуйста, сделайте * не * перекрестный стол между r-help и здесь. Плохая карма. –

+2

@DirkEddelbuettel - Почему бы и нет? Каждый, кто часто посещает тег [R], также является последователем R-help? Мне кажется, что это два совершенно разных сообщества. – 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) 
}) 

... Но только чтобы объяснить, как исправить вас для цикла:

Вы должны иметь список для назначения. И создание одного из правильной длины всегда хорошая идея для выполнения:

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

Спасибо @joran за ваше предложение. – GodinA

2

Будет ли следующая работа для вас?

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

Спасибо @jmsigner за ваше предложение. – GodinA