[R-br] Problema em loop
Sandro Sperandei
ssperandei em hotmail.com
Quinta Abril 12 17:24:32 BRT 2012
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.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120412/80ac63f2/attachment.html>
Mais detalhes sobre a lista de discussão R-br