# Leer datos
.getCrucero = function(acustica, biometrico, biologia, oceanografia, crucero,
directorio, ...) {
# importa bases
baseBiometrico = .getBaseBiometrico(file = biometrico)
bitacoraAcustica = .getBaseAcustica(file = acustica)
baseBiologia = .getBaseBiologia(file = biologia)
baseOceano = .getBaseOceanografia(file = oceanografia)
# Combinar ambas bases en un solo objeto para la salida
info = list(surveyName = as.character(crucero), dirFiles = directorio)
datos = list(baseBiometrico = baseBiometrico, bitacoraAcustica = bitacoraAcustica,
baseBiologia = baseBiologia, baseOceano = baseOceano,
info=info)
return(datos)
}
.getBaseBiometrico = function(file, ...) {
if(is.null(file)) return(NULL)
isMF = .isMF(file)
base = if(isMF) .readMF(file, ...) else .readED(file, sp="anchoveta", ...)
colnames(base) = tolower(colnames(base))
base$w_muestra_g = base$peso.muestra
# TO_DO: correct name 'w_cap_anch_kg'
base$w_cap_anch_kg = base$captura
base$buque = as.character(base$buque)
base$fecha = as.character(base$fecha)
base$weight = base[, "peso"]/base$frec
base$length = base[, "l"]
base$lon = -abs(base$lon)
base$lat = -abs(base$lat)
base$sp = tolower(base$sp)
base = base[!is.na(base$lon) & !is.na(base$lat),]
return(base)
}
.readED = function(file, sp, ...) {
base = read.csv(file, header = FALSE, stringsAsFactors = FALSE,
row.names = 1, ...)
base = .convertirCruceroED(base, sp=sp) # convertir a MF (modificar)
return(base)
}
.readMF = function(file, ...) {
base = read.csv(file=file, stringsAsFactors = FALSE)
colnames(base) = tolower(colnames(base))
return(base)
}
.isMF = function(file) {
header = tolower(unlist(strsplit(readLines(con=file, n=1), ",")))
ind = c("lance", "fecha", "sp") %in% header
ed = all(!ind) & (header[1] == "buque")
mf = all(ind)
if(!isTRUE(ed) & !isTRUE(mf))
stop(sprintf("El archivo %s no contiene una base de Calas", file))
flag = mf
return(flag)
}
.getBaseAcustica = function(file) {
if(is.null(file)) return(NULL)
bitacoraAcustica = read.csv(file, stringsAsFactors = FALSE)
colnames(bitacoraAcustica) = tolower(colnames(bitacoraAcustica))
bitacoraAcustica$anc = rowSums(cbind(bitacoraAcustica$ancp,
bitacoraAcustica$ancg), na.rm=TRUE)
# Definir una columna de clase 'Fecha'
bitacoraAcustica$date_m = paste(substr(bitacoraAcustica$date_m, 1, 4),
substr(bitacoraAcustica$date_m, 5, 6),
substr(bitacoraAcustica$date_m, 7, 8),
sep = "-")
trim <- function( x ) {
gsub("(^[[:space:]]+|[[:space:]]+$)", "", x)
}
bitacoraAcustica$time_m = trim(bitacoraAcustica$time_m)
bitacoraAcustica$time_s = trim(bitacoraAcustica$time_e)
bitacoraAcustica$time_e = trim(bitacoraAcustica$time_m)
bitacoraAcustica$fecha = paste(bitacoraAcustica$date_m,
bitacoraAcustica$time_m, sep = "_")
bitacoraAcustica$lon = bitacoraAcustica$lon_m
bitacoraAcustica$lat = bitacoraAcustica$lat_m
bitacoraAcustica$area = .asignarIsoparalitorales(bitacoraAcustica)
ind = complete.cases(bitacoraAcustica[, c("lat", "lon", "fecha")])
bitacoraAcustica = bitacoraAcustica[ind,]
bitacoraAcustica$fecha = strptime(bitacoraAcustica$fecha,
format = "%Y-%m-%d_%H:%M:%S")
return(bitacoraAcustica)
}
.getBaseBiologia = function(file, ...){
if(is.null(file)) return(NULL)
baseBiologia = read.csv(file, stringsAsFactors = FALSE)
colnames(baseBiologia) = tolower(colnames(baseBiologia))
baseBiologia$gonada = rowMeans(baseBiologia[, c("p.gonada", "p.gon.hidrat")],
na.rm=TRUE)
ind = is.na(baseBiologia$gonada) & baseBiologia$est.macro == 1
baseBiologia$gonada[which(ind)] = 0
#Creando la nueva variable Peso
baseBiologia$weight = baseBiologia$p.total - baseBiologia$gonada
return(baseBiologia)
}
.getBaseOceanografia = function(file){
if(is.null(file)) return(NULL)
baseOceanografia = read.csv(file, stringsAsFactors = FALSE)
colnames(baseOceanografia) = tolower(colnames(baseOceanografia))
return(baseOceanografia)
}
# Genera valores de ecoabundancia
.getEcoabundancia = function(data, sp, ...){
sp = getSpeciesInfo(sp)$acustica
baseCalas = data$baseCalas
bitacoraAcustica = data$bitacoraAcustica
# Asignar Sa a cada cala
ecoabundancia = numeric(nrow(baseCalas))
for(i in seq_len(nrow(baseCalas))) {
# Calcular las distancias desde la cala i hacia los centroides de todas las areas isoparalitorales
distancias = .distancia(x1 = baseCalas$lon[i], x2 = bitacoraAcustica$lon,
y1 = baseCalas$lat[i], y2 = bitacoraAcustica$lat)
# Ordenar las ecoabundancias segun las distancias obtenidas y extraer aquellas
# correspondientes a los 6 valores menores
listaSa = as.numeric(bitacoraAcustica[, sp][order(distancias, na.last = FALSE)])
listaSa = listaSa[1:6]
# Si de los valores extraidos, la media es cero, utilizar el menor valor positivo de todo el crucero
if(sum(listaSa, na.rm = TRUE) > 0 && mean(listaSa, na.rm = TRUE) > 0)
ecoabundancia[i] = mean(listaSa, na.rm = TRUE) else
ecoabundancia[i] = min(bitacoraAcustica[, sp][bitacoraAcustica[, sp] > 0], na.rm = TRUE)
}
baseCalas$ecoabundancia = ecoabundancia
return(baseCalas)
}
# Obtener frecuencias ponderadas
.getLength = function(baseCalas, sp, ...) {
marcas = .createMarks(getSpeciesInfo(sp))
baseFrecuencias = baseCalas[,as.character(marcas)]
frecuenciaPonderada = mat.or.vec(nr = nrow(baseFrecuencias),
nc = ncol(baseFrecuencias))
for(i in 1:nrow(baseFrecuencias)) {
# Obtener valores de frecuencia, peso y latitud para cada cala
frecuencia = baseFrecuencias[i,]
peso = baseCalas$ecoabundancia[i]
latitud = baseCalas$lat_g[i]
a = baseCalas$a[i]
b = baseCalas$b[i]
# Realizar la ponderacion usando los parametros segun region
frecuenciaPonderada[i,] = .ponderaTallas(frecuencia=frecuencia,
marcas=marcas, a=a, b=b, peso=peso)
}
return(frecuenciaPonderada)
}
# Obtener indices de cobertura por area isoparalitoral
.coverageIndex = function(bitacoraAcustica, sp, method = 2){
out = switch(method,
"1" = .coverageIndex_1(bitacoraAcustica, sp=sp), # All have value 1
"2" = .coverageIndex_2(bitacoraAcustica, sp=sp),
"3" = .coverageIndex_3(bitacoraAcustica, sp=sp),
"4" = .coverageIndex_4(bitacoraAcustica, sp=sp),
"5" = .coverageIndex_5(bitacoraAcustica, sp=sp),
"Criterio de proporcion no valido.") # Concave hull criteria
#"3" = .IndexCoverageEye(bitacoraAcustica))
return(out)
}
.addConditionFactor = function(data, sp){
ab_base = calculateConditionFactor(data=data, sp=sp)
output = merge(data$baseCalas, ab_base, sort=TRUE)
return(output)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.