[R-br] Função com vários if e else if que não funciona
ASANTOS
alexandresantosbr em yahoo.com.br
Terça Dezembro 15 18:47:08 BRST 2015
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(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
alexandre.santos em cas.ifmt.edu.br
Lattes: http://lattes.cnpq.br/1360403201088680
======================================================================
Mais detalhes sobre a lista de discussão R-br