[R-br] Problema em loop

ASANTOS alexandresantosbr em yahoo.com.br
Quinta Abril 12 10:41:15 BRT 2012


Obrigado pela dica Sandro,

        Mas não funcionou não.

Alexandre

Em 12/04/2012 10:31, Sandro Sperandei escreveu:
> Alexandre,
>
> Notei que seu número de parcelas é sempre uma potência de 2. Correto?
>
> Se for esse o caso, atribua á variável "número de parcelas" 
> simplesmente o valor de 2^k.
>
> Funcionou?
>
> S
>
>
>
> -----Mensagem Original----- From: ASANTOS
> Sent: Thursday, April 12, 2012 10:20 AM
> To: r-br em listas.c3sl.ufpr.br
> Subject: [R-br] Problema em loop
>
> Bom dia pessoal,
>
>      Estou tentando dividir uma área em 2, 4, 8, 16, 32, 64, 128, 256,
> 512, 1024, e 2048, para tira o CV entre as parcelas e armazenar o
> resultado em write.table(cv2, file ="area1.mod", row.names=F,append=T).
> Bom, estou conseguindo calcular um a um, mais eu gostaria de otimizar  e
> fazer um loop em um vetor que especifica o número de parcelas, como em:
>
> n.parc<-c(2,4,8,16,32,64,128,256,512,1024,2048)##Número de parcelas
>
> for(k in 1:length(n.parc))
>
> mas não sei porque razão não estou conseguindo fazer esse loop, já
> tentei com n.parc e n.parc[k] e nada, segue a minha rotina completa:
>
> ####Divisão em 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 parcelas
>
> n.parc<-c(2,4,8,16,32,64,128,256,512,1024,2048)##Número de parcelas
>
> for(k in 1:length(n.parc)){
>
> at2<-at/k
> parc2<-round(sqrt(at2))
> N_S=seq(p0[1], by=parc2, length.out=10)##Define o centro das parcelas
> L_O=seq(p0[2],by=parc2, length.out=10)
> grid0 <- expand.grid(N_S=seq(p0[1], by=parc2, length.out=2),
> L_O=seq(p0[2],by=parc2, length.out=2))#transformar em área essas medidas
> do centro de parcela
> grid=GridTopology(c(304404,  6468774), c(parc2,parc2), c(10,10))
> grid=SpatialGrid(grid=grid)
> plot(grid)
> points(ninhos)
> lines(limite)
> ##Passando para objetos da classe Spatial
> #Pontos
> pontos <- SpatialPoints(cbind(ninhos$x,ninhos$y))
> pontos<- SpatialPoints(list(ninhos$x,ninhos$y))
> pontos<- SpatialPoints(data.frame(ninhos$x,ninhos$y))
>
> ##Limite da área
> borda=SpatialPolygons(list(Polygons(list(Polygon(limite)),"limite")))
> ##Plotando
> plot(borda)#borda
> points(pontos,col='grey')#Pontos
> lines(grid,col='blue')#Malha
> #remover o que esta fora do limite
> fullgrid(grid)=FALSE
> clip<-overlay(grid,borda)##Jogando o limite sobre a malha
> sel.grid <-grid[!is.na(clip),]##Retirando os NA's que correspondem a
> malha fora do limite
> points(sel.grid, col='blue')#ver o resultado final grafico
> class(sel.grid)  ## SpatialPixels
> ap3 <- as.SpatialPolygons.SpatialPixels(sel.grid)
> table(over(pontos, ap3)) ##Frequencia em cada parcela
> z<-table(over(pontos, ap3)) #contar quantos pontos tem em cada parcela
> z<-as.data.frame(z) #formato somente com colunas validas
> cc<- SpatialPoints(cbind(grid0$N_S,grid0$L_O))#
> cc<- SpatialPoints(list(grid0$N_S,grid0$L_O))
> cc<- SpatialPoints(data.frame(grid0$N_S,grid0$L_O))
> clip2<-overlay(cc,ap3)
> sel.cc<-cc[!is.na(clip2),]#seleção de pontos que nao estao dentro da area
> #criar matriz nula
> coords<-NULL#matriz sem valor para criar os pontos
> coords<-sel.cc[1:length(sel.cc)] #numero para cada parcela, ate o final
> do comprimento do vetor
> coords<-as.data.frame(coords)#transformar em data frame
> Var1<-1:length(sel.cc)#criar novo objeto para comparação, referenciando
> a coordenada do centroide
> coords<-cbind(coords,Var1) #Var1= numero das parcelas
> myList <- list(coords, z)#tabela com qtdade dentro de coords e de z
> final<-merge(coords, z, by.x='Var1', by.y='Var1', all.x=TRUE,
> all.y=TRUE)#comando para mostrar os NA para krigagem ordinal(limitação
> do software, não mostra as parcelas que tem 0 ninhos)
> final<-final[,-1]#não precisa da 1a coluna
> cv2<-sqrt(var(final$Freq))/mean(final$Freq)
> write.table(cv2, file ="area1.mod", row.names=F,append=T)
> result=read.table("area1.mod",header=F)
> }
> ##########################################################
>
>
> Alguém poderia me dar uma help,
>
> Obrigado,
>


-- 
Alexandre dos Santos
Engenheiro Florestal, Dr.
Universidade Federal de Lavras
Departamento de Entomologia
Laboratório de Entomologia Florestal
Caixa Postal 3037
37200-000 - Lavras/MG
Fone: +55 (35) 9223-0304



Mais detalhes sobre a lista de discussão R-br