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

ASANTOS alexandresantosbr em yahoo.com.br
Sexta Fevereiro 5 16:24:04 BRST 2016


Prezados Listeiros,

       Mais um problema com a minha função, apesar de eu especificar ao 
final que class(results) == "SpatialGridDataFrame", o resultado final 
não é um
SpatialGridDataFrame mas um objeto numeric e não sei porque, alguém pode 
me ajudar?

      Segue a função nova desenvolvida com a ajuda do Éder:

### <code r>
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)
{
  Lmax <- switch(as.character(band),
             "2" = 120.64,
             "3" = 151.31,
             "4" = 157.57,
             "5" = 69.03,
             NA)

      if (is.na <http://is.na>(Lmax)) stop("invalid band")

  Lmin = 0
  Qmax = 127
      x <- as.vector(as.matrix(x))
  results <- 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
  print(paste(band, Lmax))
  print(results)
  results
}
######--
teste2<-radconvL(band2, band = 2)
teste3<-radconvL(band2, band = 3)
teste1<-radconvL(band2, band = 1)
### </code>

-- 
======================================================================
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 05/02/2016 09:58, Éder Comunello escreveu:
> Alexandre, bom dia!
>
> Embora você já tenha resolvido seu problema, lembrei de uma 
> possibilidade de melhoria para o código: o uso de switch() no lugar do 
> bloco if else.
>
> ### <code r>
> 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)
> {
>    Lmax <- switch(as.character(band),
>                   "2" = 120.64,
>                   "3" = 151.31,
>                   "4" = 157.57,
>                   "5" = 69.03,
>                   NA)
>
>    if (is.na <http://is.na>(Lmax)) stop("invalid band")
>
>    Lmin = 0
>    Qmax = 127
>    x <- as.vector(as.matrix(x))
>    results <- 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
>    print(paste(band, Lmax))
>    print(results)
>    results
> }
> ######--
> teste2<-radconvL(band2, band = 2)
> teste3<-radconvL(band2, band = 3)
> teste1<-radconvL(band2, band = 1)
> ### </code>
>
>
>> ================================================
> Éder Comunello
> PhD Student in Agricultural Systems Engineering (USP/Esalq)
> Brazilian Agricultural Research Corporation (Embrapa)
> Dourados, MS, Brazil [22 16.5'S, 54 49.0'W]
>
>
>
>
>
> _______________________________________________
> 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/20160205/2d9c01c6/attachment.html>


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