[R-br] Função com vários if e else if que não funciona [RESOLVIDO]

ASANTOS alexandresantosbr em yahoo.com.br
Quinta Dezembro 17 11:07:15 BRST 2015


Muito bem pesado Thiago, vou atentar a isso.

         E agradeço também ao Cesar, nunca havia usado a ferramenta de 
depuração e resolveu o meu problema.

Segue minha função final, se alguém for trabalhar com imagens do 
Resourcesat e sensor LISS IIII:

##Função para conversão DN para radiância - LISS III 
---------------------------
radconvL<-function(x, band = 2)
{
     BAND <- c("2", "3", "4", "5")
     band <- pmatch(band, BAND)
     if (is.na(band))
         stop("invalid band")

     Lmin = 0
     Qmax = 127
     x <- as.vector(as.matrix(x))
     results <- x

     if (band == 2) {
     Lmax = 120.64
     }
     else if (band == 3) {
     Lmax = 151.31
     }
     else if (band == 4) {
     Lmax = 157.57
     }
     else if(band == 5) {
     Lmax = 69.03
     }

     x <- Lmin + ((Lmax-Lmin)*x)/Qmax
     if (class(results) == "SpatialGridDataFrame")
         results em data[, 1] <- x
     else if (is.data.frame(x))
         results <- data.frame(matrix(x, nrow = nrow(results),
             ncol = ncol(results)))
     else results <- x
     results
}
######--------------------------------------------------------------------------

-- 
======================================================================
Alexandre dos Santos
Proteção Florestal
IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
Campus Cáceres
Caixa Postal 244
Avenida dos Ramires, s/n
Bairro: Distrito Industrial
Cáceres - MT                      CEP: 78.200-000
Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
e-mails:alexandresantosbr em yahoo.com.br
         alexandre.santos em cas.ifmt.edu.br
Lattes: http://lattes.cnpq.br/1360403201088680
======================================================================

Em 16/12/2015 21:11, Thiago V. dos Santos escreveu:
> Uma opção mais eficiente (e provavelmente mais legível) é aproveitar 
> os recursos de vetorização do R.
>
> O que eu tenho feito é criar um raster stack com todas as bandas do 
> landsat. Depois, eu crio uma lista com os parametros de calibração de 
> cada banda (que você vai ler nos arquivos de calibração). Funciona 
> melhor se você deixar todos os arquivos - imagens e arquivos de 
> calibração - em uma pasta só.
>
> Assumindo que o raster stack tem o mesmo tamanho da lista, você pode 
> aplicar uma multiplicação direta para fazer a calibração.
> Greetings,
>  -- Thiago V. dos Santos
>
> PhD student
> Land and Atmospheric Science
> University of Minnesota
>
>
>
> On Tuesday, December 15, 2015 1:46 PM, Cesar Rabak 
> <cesar.rabak em gmail.com> wrote:
>
>
> Alexandre,
>
> A melhor forma de você atacar esse problema é usar as facilidades de 
> depuração do R:
>
> > ?debug
>
> para ver a documentação do depurador padrão.
>
> Um tutorialzinho sobre seu uso pode ser encontrado aqui: 
> http://www.biostat.jhsph.edu/~rpeng/docs/R-debug-tools.pdf 
> <http://www.biostat.jhsph.edu/%7Erpeng/docs/R-debug-tools.pdf>
>
> HTH
> --
> Cesar Rabak
>
>
>
> 2015-12-15 18:47 GMT-02:00 ASANTOS <alexandresantosbr em yahoo.com.br 
> <mailto:alexandresantosbr em yahoo.com.br>>:
>
>     Caros Listeiros,
>
>
>              Estou tentando criar uma função abaixo para converter um
>     SpatialGridDataFrame originado de uma imagem de satélite para
>     reflectância, mas a função que eu criei (radconvL()) pelo excesso
>     de else if não esta funcionando. Meu problema é que não dá erro, o
>     que normalmente ajuda a detectar o problema, mas no meu caso a
>     função nem funciona, segue meu CRM abaixo, alguém poderia me ajudar?
>
>     require(raster)
>     require(sp)
>
>     # RasterLayer inventado
>     r <- raster(nrows=10, ncols=10)
>     r <- setValues(r, 1:ncell(r))
>     plot(r)
>
>     band2<- as(r, 'SpatialGridDataFrame') ### transforma em
>     SpatialGridDataFrame
>
>
>
>     ##Função para conversão DN para reflectância
>     radconvL<-function(x, band = 2)
>     {
>         BAND <- c("2", "3", "4", "5")
>         band <- pmatch(band, BAND)
>         Lmin = 0
>         Qmax = 127
>
>         if (is.na <http://is.na/>(band))
>             stop("invalid band")
>
>         if (band == 2) {
>         Lmax = 120.64
>         results <- x
>         x <- as.vector(as.matrix(x))
>         x <- Lmin + ((Lmax-Lmin)*x)/Qmax
>         if (class(results) == "SpatialGridDataFrame")
>             results em data[, 1] <- x
>         else if (is.data.frame(x))
>             results <- data.frame(matrix(x, nrow = nrow(results),
>                 ncol = ncol(results)))
>         else results <- x
>         results
>         }
>         else if (band == 3) {
>         Lmax = 151.31
>         results <- x
>         x <- as.vector(as.matrix(x))
>         x <- Lmin + ((Lmax-Lmin)*x)/Qmax
>         if (class(results) == "SpatialGridDataFrame")
>             results em data[, 1] <- x
>         else if (is.data.frame(x))
>             results <- data.frame(matrix(x, nrow = nrow(results),
>                 ncol = ncol(results)))
>         else results <- x
>         results
>         }
>         else if (band == 4) {
>         Lmax = 157.57
>         results <- x
>         x <- as.vector(as.matrix(x))
>         x <- Lmin + ((Lmax-Lmin)*x)/Qmax
>         if (class(results) == "SpatialGridDataFrame")
>             results em data[, 1] <- x
>         else if (is.data.frame(x))
>             results <- data.frame(matrix(x, nrow = nrow(results),
>                 ncol = ncol(results)))
>         else results <- x
>         results
>         }
>         else if(band == 5) {
>         Lmax = 69.03
>         results <- x
>         x <- as.vector(as.matrix(x))
>         x <- Lmin + ((Lmax-Lmin)*x)/Qmax
>         if (class(results) == "SpatialGridDataFrame")
>             results em data[, 1] <- x
>         else if (is.data.frame(x))
>             results <- data.frame(matrix(x, nrow = nrow(results),
>                 ncol = ncol(results)))
>         else results <- x
>         results
>         }
>     }
>     ######
>     teste<-radconvL(band2, band=2) ## Aqui não funciona e não sei porque
>     teste
>
>
>     Muito obrigado,
>
>     -- 
>     ======================================================================
>     Alexandre dos Santos
>     Proteção Florestal
>     IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato
>     Grosso
>     Campus Cáceres
>     Caixa Postal 244
>     Avenida dos Ramires, s/n
>     Bairro: Distrito Industrial
>     Cáceres - MT                      CEP: 78.200-000
>     Fone: (+55) 65 8132-8112 (TIM)   (+55) 65 9686-6970 (VIVO)
>     e-mails:alexandresantosbr em yahoo.com.br
>     <mailto:e-mails%3Aalexandresantosbr em yahoo.com.br>
>     alexandre.santos em cas.ifmt.edu.br
>     <mailto:alexandre.santos em cas.ifmt.edu.br>
>     Lattes: http://lattes.cnpq.br/1360403201088680
>     ======================================================================
>
>     _______________________________________________
>     R-br mailing list
>     R-br em listas.c3sl.ufpr.br <mailto: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
>     fornea cdigo mnimo reproduzvel.
>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br <mailto: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� 
> c�igo m�imo reproduz�el.
>
>
>
>
> _______________________________________________
> 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/20151217/ea01a408/attachment.html>


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