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

Thiago Serafim thiago.serafim em gmail.com
Quarta Fevereiro 3 18:10:58 BRST 2016


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>:

> 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 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(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
> 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/7fadb1a8/attachment.html>


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