[R-br] Problema em loop

ASANTOS alexandresantosbr em yahoo.com.br
Quinta Abril 12 12:37:39 BRT 2012


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



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