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

Mauro Sznelwar sznelwar em uol.com.br
Domingo Dezembro 20 23:04:25 BRST 2015


Como é que eu faço para rodar esta função?

 

 

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  <mailto:cesar.rabak em gmail.com> <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>:

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
Lattes: http://lattes.cnpq.br/1360403201088680
======================================================================



 



---
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20151220/18cbc914/attachment.html>


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