[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