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

ASANTOS alexandresantosbr em yahoo.com.br
Quarta Fevereiro 3 20:12:45 BRST 2016


Obrigado Thiago, mas isso eu havia recebido, mas não entendi porque ele 
não lê band=2, mas lê band=3, band=4 e band=5!!!!


Caros Listeiros,

       A um mês atrás eu consegui criar a função abaixo com a ajuda de 
vocês, no entanto, descobri que ela funciona quando seleciono band=3, 4 
ou 5, mas para band=2 que é a primeira condição da função não funciona 
(Error in radconvL(band2, band = 2) : object 'Lmax' not found ), alguém 
poderia me ajudar?

Segue CRM:

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 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
}
######--

teste2<-radconvL(band2, band = 2)
teste2

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
         alexandre.santos em cas.ifmt.edu.br
Lattes: http://lattes.cnpq.br/1360403201088680
OrcID: orcid.org/0000-0001-8232-6722
Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10
LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635
======================================================================

Em 03/02/2016 17:10, Thiago Serafim escreveu:
> Lendo a mensagem de erro, vemos que Lmax não foi definido.
> Olhando seu programa, Lmax só é definido quando band é 2, ou 3, ou 4 ou 5.
> Conclui-se que, na sua chamada de função,  band não é igual a nenhum 
> desses valores.
>
> Quando a linha  x <- Lmin + ((Lmax-Lmin)*x)/Qmax é executada, acontece 
> o erro.
>
>
> 2016-02-03 17:44 GMT-02:00 ASANTOS <alexandresantosbr em yahoo.com.br 
> <mailto:alexandresantosbr em yahoo.com.br>>:
>
>     Caros Listeiros,
>
>           A um mês atrás eu consegui criar a função abaixo com a ajuda
>     de vocês, no entanto, descobri que ela funciona quando seleciono
>     band=3, 4 ou 5, mas para band=2 que é a primeira condição da
>     função não funciona (Error in radconvL(band2, band = 2) : object
>     'Lmax' not found ), alguém poderia me ajudar?
>
>     Segue CRM:
>
>     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 radiância - LISS III
>     ---------------------------
>     radconvL<-function(x, band = 2)
>     {
>          BAND <- c("2", "3", "4", "5")
>          band <- pmatch(band, BAND)
>
>          if (is.na <http://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
>     }
>     ######--
>
>     teste2<-radconvL(band2, band = 2)
>     teste2
>
>     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 <tel:%28%2B55%29%2065%208132-8112>  (TIM)(+55) 65 9686-6970 <tel:%28%2B55%29%2065%209686-6970>  (VIVO)
>     e-mails:alexandresantosbr em yahoo.com.br
>     <mailto:e-mails:alexandresantosbr 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
>     OrcID:orcid.org/0000-0001-8232-6722 <http://orcid.org/0000-0001-8232-6722>  
>     Researchgate:https://www.researchgate.net/profile/Alexandre_Santos10                        
>     LinkedIn:https://br.linkedin.com/in/alexandre-dos-santos-87961635
>     ======================================================================
>
>     Em 28/12/2015 16:22, ASANTOS escreveu:
>>     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 radiância - LISS III
>>     ---------------------------
>>     radconvL<-function(x, band = 2)
>>     {
>>          BAND <- c("2", "3", "4", "5")
>>          band <- pmatch(band, BAND)
>>
>>          if (is.na <http://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
>>     }
>>     ######--
>>
>>     teste<-radconvL(band2, band = 4)
>>     teste 
>
>
>     _______________________________________________
>     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ç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.

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160203/03a3787d/attachment.html>


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