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(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@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@yahoo.com.br
alexandre.santos@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(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@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>
_______________________________________________
R-br mailing list
R-br@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.