[R-br] Problema em loop
ASANTOS
alexandresantosbr em yahoo.com.br
Quinta Abril 12 22:41:04 BRT 2012
Boa Sandro!!!!!!!!!!!!!!!!
Funcionou, um grande obrigado,
Minha adaptação foi:
####Divisão em 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 parcelas
res<-NULL
for(k in 1:11){
n=2^k
for(i in 1:n){
at2<-at/n
parc2<-round(sqrt(at2))
N_S=seq(p0[1], by=parc2, length.out=100)##Define o centro das parcelas
L_O=seq(p0[2],by=parc2, length.out=100)
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(100,100))
grid=SpatialGrid(grid=grid)
##Passando para objetos da classe Spatial
#Pontos
pontos <- SpatialPoints(cbind(ninhos$x,ninhos$y))#cbind-junta duas
colunas em uma, no caso as coordenadas
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")))
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
cv2<-sqrt(var(z$Freq))/mean(z$Freq)
res=rbind(res,c(n,cv2))
}}
#
Abraço,
Alexandre
Em 12/04/2012 17:24, Sandro Sperandei escreveu:
> Ahhhhhhhh!!!
>
> Não vai funcionar mesmo, Alexandre... hahahahaha!!!
>
> Note que vc está dividindo at por 2^k e não dividindo at em 2^k partes
> iguais... :D
>
> experimente adaptar o script abaixo:
>
>
> ---------------------------------
> dados = seq(1:4096)
>
> for(k in 1:11){
> n=2^k
> cv = c()
> for(i in 1:n){
> L = length(dados)/n
> cv[i] =
> sd(dados[((i-1)*L):(L*i)])/mean(dados[((i-1)*L):(L*i)])
> }
>
>
>
> -------------------------------
>
> S
>
>
>
>
>
> > Date: Thu, 12 Apr 2012 12:37:39 -0300
> > From: alexandresantosbr em yahoo.com.br
> > To: r-br em listas.c3sl.ufpr.br
> > Subject: Re: [R-br] Problema em loop
> >
> > Sandro,
> >
> > Tentei fazer:
> >
> > res=NULL
> >
> > for(k in 1:11){
> >
> > at2<-at/2^k
> >
> > e no final da rotina
> >
> > res=rbind(res,c(k,cv2))
> >
> > Mesmo assim não funcionou, confirmei e a variável at é numérica.
> >
> > Obrigado,
> >
> > Alexandre
> >
> > Em 12/04/2012 12:17, Sandro Sperandei escreveu:
> > > Alexandre,
> > >
> > > Não precisa do n.parc... basta colocar for(k in 1:11). Veja que vc
> > > começou a ter resultados numéricos! O problema, então, deve estar no
> > > seu objeto "at". Verifique se ele é realmente um vetor numérico com
> > > "is.numeric(at)". Provavelmente, a resposta será "FALSE"... Corrija
> > > "at" e tudo ficará bem... :D
> > >
> > > S
> > >
> > >
> > >
> > > -----Mensagem Original----- From: ASANTOS
> > > Sent: Thursday, April 12, 2012 11:58 AM
> > > To: r-br em listas.c3sl.ufpr.br
> > > Subject: Re: [R-br] Problema em loop
> > >
> > > Sandro,
> > >
> > > Fiz o que você me sugeriu:
> > >
> > > n.parc<-1:11
> > >
> > > for(k in 1:length(n.parc)){
> > >
> > > at2<-as.numeric(at)/2^k
> > >
> > > mais como resultado tenho:
> > >
> > >> result
> > > V1
> > > 1 x
> > > 2 0.511524054475375
> > > 3 x
> > > 4 0.511524054475375
> > > 5 x
> > > 6 0.421325044234743
> > > 7 x
> > > 8 <NA>
> > > 9 x
> > > 10 <NA>
> > >
> > > Vou tentar outra abordagem para obter o loop,
> > >
> > > Obrigado,
> > >
> > > Alexandre
> > >
> > >
> > >
> > >
> > >
> > > Em 12/04/2012 11:41, Sandro Sperandei escreveu:
> > >> Bem, se vc usar "at2<-at/2^k", com k variando de 1 até 11 e
> continuar
> > >> dando NA é pq o seu "at" não está sendo encarado como numérico. Se
> > >> tiver certeza de que ele é numérico, tente
> "at2<-as.numeric(at)/2^k".
> > >> As vezes, colocamos números em um vetor, mas o R não reconhece como
> > >> núero, especialmente quando o valor é parte de um objeto-resposta de
> > >> uma função.
> > >>
> > >> S
> > >>
> > >>
> > >>
> > >>
> > >> -----Mensagem Original----- From: ASANTOS
> > >> Sent: Thursday, April 12, 2012 11:21 AM
> > >> To: r-br em listas.c3sl.ufpr.br
> > >> Subject: Re: [R-br] Problema em loop
> > >>
> > >> Exatamente Sandro,
> > >>
> > >> Pretendo utilizar essa variável em at2<-at/k e eu já tinha
> > >> tentado sem sucesso at2<-at/n.parc[k], as duas alternativas eu tenho
> > >> como resultado NA's.
> > >>
> > >> Obrigado,
> > >>
> > >> Alexandre
> > >>
> > >> Em 12/04/2012 11:11, Sandro Sperandei escreveu:
> > >>> Alexandre,
> > >>>
> > >>> Olhei o algoritmo que vc enviou e, em momento algum, vi vc chamando
> > >>> "n.parc" ou "n.parc[k]", a não ser nos limites do contador k. Pelo
> > >>> que entendi, vc quer atribuir o valor 2, 4, 8, etc. a uma variável
> > >>> que irá determinar o número de parcelas. Em que ponto você usa essa
> > >>> variável? Seria em "at2<-at/k"?
> > >>>
> > >>> S
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> -----Mensagem Original----- From: ASANTOS
> > >>> Sent: Thursday, April 12, 2012 10:41 AM
> > >>> To: r-br em listas.c3sl.ufpr.br
> > >>> Subject: Re: [R-br] Problema em loop
> > >>>
> > >>> 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
> >
> > _______________________________________________
> > R-br mailing list
> > R-br em listas.c3sl.ufpr.br
> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
--
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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120412/194f793e/attachment.html>
Mais detalhes sobre a lista de discussão R-br