1 Preparación de base

1.1 Paquetes

library(DT)

1.2 base de datos

# definir directorio a donde guardar los archivos
directorio <- "~/Desktop/Recursos_R/r_avanzado/scripts/datos_bucles"


# hacer vector con nombre y direccion de archivos
archivos_txt <- 
    list.files(
        path = directorio, 
        full.names = TRUE,
        pattern = "TXT$" # crea lista de archivos en wd con terminación específica. 
    )

# Verificar vector
length(archivos_txt)
## [1] 19

2 Ejercicios

2.1

Haga un bucle for que una todos los datos contenidos en los archivos de texto en un solo cuadro de datos (‘data frame’, debe llamarse ‘datos_camaras’) y añada una columna con el nombre del archivo de donde provienen los datos (debe llamarse ‘archivo’; pistas: 1) añadir el nombre del archivo en una columna se hace en el cuerpo del bucle luego de leer el archivo; 2) recuerden usar basename()).

datos_camaras <- vector() # vector vacío

# inicio del bucle
for (i in archivos_txt) { #lee cada archivo, i son los archivos que son elementos de la lista archivos_txt
    # leer archivo
    txt <- read.table(i, header = TRUE, skip = 4, sep = "\t") #lee cada archivo, que serian los i
    archivo <- basename(i) # extrae el nombre del archivo
    datos <- data.frame(archivo, txt) # adjunta en una base el nombre del archivo con los datos extraídos
    datos_camaras <- rbind(datos_camaras, datos) # une cada base de datos hecha previamente en una sola, por fila. 
    # guardar resultados en vector vacio
}

2.2

Haga un bucle sapply que devuelva el número de familias para cada archivo. El bucle debe usar los datos en el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto). El resultado debe ser guardado en un cuadro de datos (‘data frame’) que contenga las columnas ‘archivo’ y ‘n_familias’. (pistas: 1) necesitan crear una función en la llamada del bucle; 2) el bucle debe ciclar sobre cada uno de los nombres de archivo; 3) deben crear un subconjunto de los datos para cada archivo a lo interno del bucle). Las primeras 3 filas del cuadro de datos deben verse así:

arch <- unique(datos_camaras$archivo) # crea un vector de factores de los archivos.
arch 
##  [1] "2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT"          
##  [2] "2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT"   
##  [3] "2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT"   
##  [4] "2022-09-04_S1-LB10-RN9_Arco2_2022-07-15_MaxN.TXT"              
##  [5] "2022-09-07_P1-LB12-RB13_Gissler_2022-03-30_MaxN.TXT"           
##  [6] "2022-09-11_P1-LB14-RB13_Risco_2022-03-26_MaxN.TXT"             
##  [7] "2022-09-12_S6-LN4-RN8_Chatham_2022-03-28_MaxN.TXT"             
##  [8] "2022-09-14_R2C4_Catalinas1_21-7-2021_MaxN.TXT"                 
##  [9] "2022-09-14_S2C4_Virador1-20-7-2021_MaxN.TXT"                   
## [10] "2022-09-14_S6-LB7-RB8_Silverado_2022-03-28_MaxN.TXT"           
## [11] "2022-09-15_S6-LB9-RB11_Vikinga_2022-03-30_MaxN.TXT"            
## [12] "2022-09-15_T4-LcamT8-RcamOFI-5_Barlovento2_2021-10-17_MaxN.TXT"
## [13] "2022-09-16_S2C8_Bajo Rojo1_2021-07-28_MaxN.TXT"                
## [14] "2022-09-16_T4-LcamN5-RcamT6_ISJ2_2021-09-25_MaxN.TXT"          
## [15] "2022-09-17_SB3-LcamT4-RcamN6_CanalSJ_2021-09-25_MaxN.TXT"      
## [16] "2022-09-20_T3C7_Dampier2_2021-10-19_MaxN.TXT"                  
## [17] "2022-09-22_T4-LN9-RT1_Bautista_2022-03-26_MaxN.TXT"            
## [18] "2022-09-24_T4-LcamT3-RcamSN7_Esfinge2_2021-10-17_MaxN.TXT"     
## [19] "2022-09-25_T3C2_SJ2_2021-09-25_MaxN.TXT"
length(unique(datos_camaras$Family)) # significa que en total hay 33 familias unicas, quiero saber cuantas familias unicas hay por archivo
## [1] 33
# Bucle sapply
n_familias <- sapply(X = arch, FUN = function(X){ # x es el vector de arch, con los archivos como niveles
    fam <- length(unique(datos_camaras$Family[datos_camaras$archivo == X ])) # extrae la cantidad de familias únicas de acuerdo a los datos de archivo, usando el subconjunto arch como niveles. 
})
 
n_familias # vector familias por archivo. 
##           2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT 
##                                                             19 
##    2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT 
##                                                              1 
##    2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT 
##                                                              2 
##               2022-09-04_S1-LB10-RN9_Arco2_2022-07-15_MaxN.TXT 
##                                                              8 
##            2022-09-07_P1-LB12-RB13_Gissler_2022-03-30_MaxN.TXT 
##                                                              7 
##              2022-09-11_P1-LB14-RB13_Risco_2022-03-26_MaxN.TXT 
##                                                              5 
##              2022-09-12_S6-LN4-RN8_Chatham_2022-03-28_MaxN.TXT 
##                                                              5 
##                  2022-09-14_R2C4_Catalinas1_21-7-2021_MaxN.TXT 
##                                                              5 
##                    2022-09-14_S2C4_Virador1-20-7-2021_MaxN.TXT 
##                                                             20 
##            2022-09-14_S6-LB7-RB8_Silverado_2022-03-28_MaxN.TXT 
##                                                             16 
##             2022-09-15_S6-LB9-RB11_Vikinga_2022-03-30_MaxN.TXT 
##                                                             14 
## 2022-09-15_T4-LcamT8-RcamOFI-5_Barlovento2_2021-10-17_MaxN.TXT 
##                                                              7 
##                 2022-09-16_S2C8_Bajo Rojo1_2021-07-28_MaxN.TXT 
##                                                             18 
##           2022-09-16_T4-LcamN5-RcamT6_ISJ2_2021-09-25_MaxN.TXT 
##                                                             19 
##       2022-09-17_SB3-LcamT4-RcamN6_CanalSJ_2021-09-25_MaxN.TXT 
##                                                             15 
##                   2022-09-20_T3C7_Dampier2_2021-10-19_MaxN.TXT 
##                                                              9 
##             2022-09-22_T4-LN9-RT1_Bautista_2022-03-26_MaxN.TXT 
##                                                              5 
##      2022-09-24_T4-LcamT3-RcamSN7_Esfinge2_2021-10-17_MaxN.TXT 
##                                                              6 
##                        2022-09-25_T3C2_SJ2_2021-09-25_MaxN.TXT 
##                                                             18
resultados <- data.frame("archivo" = arch, n_familias) # dataframe con los resultados previos, se selecciona solo la columna de valores, sin los nombres de las filas que ya viene dado por arch

resultados
##                                                                                                                       archivo
## 2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT                     2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT
## 2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT       2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT
## 2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT       2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT
## 2022-09-04_S1-LB10-RN9_Arco2_2022-07-15_MaxN.TXT                             2022-09-04_S1-LB10-RN9_Arco2_2022-07-15_MaxN.TXT
## 2022-09-07_P1-LB12-RB13_Gissler_2022-03-30_MaxN.TXT                       2022-09-07_P1-LB12-RB13_Gissler_2022-03-30_MaxN.TXT
## 2022-09-11_P1-LB14-RB13_Risco_2022-03-26_MaxN.TXT                           2022-09-11_P1-LB14-RB13_Risco_2022-03-26_MaxN.TXT
## 2022-09-12_S6-LN4-RN8_Chatham_2022-03-28_MaxN.TXT                           2022-09-12_S6-LN4-RN8_Chatham_2022-03-28_MaxN.TXT
## 2022-09-14_R2C4_Catalinas1_21-7-2021_MaxN.TXT                                   2022-09-14_R2C4_Catalinas1_21-7-2021_MaxN.TXT
## 2022-09-14_S2C4_Virador1-20-7-2021_MaxN.TXT                                       2022-09-14_S2C4_Virador1-20-7-2021_MaxN.TXT
## 2022-09-14_S6-LB7-RB8_Silverado_2022-03-28_MaxN.TXT                       2022-09-14_S6-LB7-RB8_Silverado_2022-03-28_MaxN.TXT
## 2022-09-15_S6-LB9-RB11_Vikinga_2022-03-30_MaxN.TXT                         2022-09-15_S6-LB9-RB11_Vikinga_2022-03-30_MaxN.TXT
## 2022-09-15_T4-LcamT8-RcamOFI-5_Barlovento2_2021-10-17_MaxN.TXT 2022-09-15_T4-LcamT8-RcamOFI-5_Barlovento2_2021-10-17_MaxN.TXT
## 2022-09-16_S2C8_Bajo Rojo1_2021-07-28_MaxN.TXT                                 2022-09-16_S2C8_Bajo Rojo1_2021-07-28_MaxN.TXT
## 2022-09-16_T4-LcamN5-RcamT6_ISJ2_2021-09-25_MaxN.TXT                     2022-09-16_T4-LcamN5-RcamT6_ISJ2_2021-09-25_MaxN.TXT
## 2022-09-17_SB3-LcamT4-RcamN6_CanalSJ_2021-09-25_MaxN.TXT             2022-09-17_SB3-LcamT4-RcamN6_CanalSJ_2021-09-25_MaxN.TXT
## 2022-09-20_T3C7_Dampier2_2021-10-19_MaxN.TXT                                     2022-09-20_T3C7_Dampier2_2021-10-19_MaxN.TXT
## 2022-09-22_T4-LN9-RT1_Bautista_2022-03-26_MaxN.TXT                         2022-09-22_T4-LN9-RT1_Bautista_2022-03-26_MaxN.TXT
## 2022-09-24_T4-LcamT3-RcamSN7_Esfinge2_2021-10-17_MaxN.TXT           2022-09-24_T4-LcamT3-RcamSN7_Esfinge2_2021-10-17_MaxN.TXT
## 2022-09-25_T3C2_SJ2_2021-09-25_MaxN.TXT                                               2022-09-25_T3C2_SJ2_2021-09-25_MaxN.TXT
##                                                                n_familias
## 2022-09-02_R3-LcamT3-RcamN4_Pel1_2021-09-24_MaxN.TXT                   19
## 2022-09-03_S6-LB13-RB12_PuntaMariaOeste_2022-03-24_MaxN.TXT             1
## 2022-09-03_T4-LB19-RB18_PuntaMariaOeste_2022-03-24_MaxN.TXT             2
## 2022-09-04_S1-LB10-RN9_Arco2_2022-07-15_MaxN.TXT                        8
## 2022-09-07_P1-LB12-RB13_Gissler_2022-03-30_MaxN.TXT                     7
## 2022-09-11_P1-LB14-RB13_Risco_2022-03-26_MaxN.TXT                       5
## 2022-09-12_S6-LN4-RN8_Chatham_2022-03-28_MaxN.TXT                       5
## 2022-09-14_R2C4_Catalinas1_21-7-2021_MaxN.TXT                           5
## 2022-09-14_S2C4_Virador1-20-7-2021_MaxN.TXT                            20
## 2022-09-14_S6-LB7-RB8_Silverado_2022-03-28_MaxN.TXT                    16
## 2022-09-15_S6-LB9-RB11_Vikinga_2022-03-30_MaxN.TXT                     14
## 2022-09-15_T4-LcamT8-RcamOFI-5_Barlovento2_2021-10-17_MaxN.TXT          7
## 2022-09-16_S2C8_Bajo Rojo1_2021-07-28_MaxN.TXT                         18
## 2022-09-16_T4-LcamN5-RcamT6_ISJ2_2021-09-25_MaxN.TXT                   19
## 2022-09-17_SB3-LcamT4-RcamN6_CanalSJ_2021-09-25_MaxN.TXT               15
## 2022-09-20_T3C7_Dampier2_2021-10-19_MaxN.TXT                            9
## 2022-09-22_T4-LN9-RT1_Bautista_2022-03-26_MaxN.TXT                      5
## 2022-09-24_T4-LcamT3-RcamSN7_Esfinge2_2021-10-17_MaxN.TXT               6
## 2022-09-25_T3C2_SJ2_2021-09-25_MaxN.TXT                                18

2.3

Haga un bucle sapply que devuelva el número de géneros (columna ‘genus’) para cada archivo. El bucle debe usar los datos en el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto). El resultado debe ser añadido como una nueva columna al cuadro de datos creado en el ejercicio 2. Las primeras 3 filas del cuadro de datos deben verse así:

# Bucle sapply
n_generos <- sapply(X = arch, FUN = function(X){ # x es el vector de arch, con los archivos como niveles
    gen <- length(unique(datos_camaras$Genus[datos_camaras$archivo == X ])) # extrae la cantidad de géneros únicos de acuerdo a los datos de archivo, usando el subconjunto arch como niveles. 
})

n_generos # vector géneros por archivo. 

resultados$n_generos <- n_generos # adjunta el vector creado por sapply como una nueva columna dentro de resultados

2.4

Haga un bucle sapply que devuelva la fecha de creación del video para cada archivo. El bucle debe usar los datos en el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto). El resultado debe ser añadido como una nueva columna al cuadro de datos creado en el ejercicio 2. Las primeras 3 filas del cuadro de datos deben verse así:

# Bucle sapply
date <- sapply(X = arch, FUN = function(X){
    date <- length(unique(datos_camaras$Date[datos_camaras$archivo == X ])) # extrae fechas unicas dentro de los archivos. 
})

resultados$date <- date # adjunta el vector creado por sapply como una nueva columna dentro de resultados

2.5 Resultados

datatable(resultados)

2.6

Haga un bucle sapply que calcule el número de veces que se observó cada especie. El bucle debe trabajar sobre el data frame ‘datos_camaras’ creado en el ejercicio 1 (no debe leer de nuevo los archivos de texto) y el cálculo debe ser la suma de la columna ‘MaxN’. Ponga los resultados en un cuadro de datos con columnas para especie y número de observaciones. (pista: unique(datos_camaras$Species)). Remueva el campo en el que especie es igual a ““. Las primeras 3 filas del cuadro de datos deben verse así:

spp <- datos_camaras$Species[-c(1,4, 148)] # subconjunto de las especies, con celdas vacías eliminadas

spp <- unique(spp) # crear vector del subconjunto con especies unicas como niveles
spp
##  [1] "xanthopterus"    "laticlavius"     "polylepis"       "naufragium"     
##  [5] "verres"          "azaleus"         "caballus"        "bipinnulata"    
##  [9] "humeralis"       "nigrirostris"    "holocanthus"     "maculicauda"    
## [13] "steindachneri"   "elegans"         "diplotaenia"     "chierchiae"     
## [17] "dispilus"        "melanotis"       "nicholsi"        "taeniourus"     
## [21] "lucasanum"       "argentiventris"  "scriptus"        "dentatus"       
## [25] "castaneus"       "passer"          "troschelii"      "atrilobata"     
## [29] "acapulcoensis"   "flavilatus"      "ghobban"         "rubroviolaceus" 
## [33] "panamensis"      "labriformis"     "colonus"         "psittacinus"    
## [37] "punctatissima"   "lewini"          "maculata"        "audax"          
## [41] "melampygus"      "mydas"           "guentherii"      "viridis"        
## [45] "nigricans"       "niger"           "lugubris"        "macarellus"     
## [49] "obesus"          "ocyurus"         "jordani"         "novemfasciatus" 
## [53] "ciliaris"        "rivoliana"       "limbatus"        "meyeni"         
## [57] "albimarginatus"  "galapagensis"    "scudderii"       "refulgens"      
## [61] "sexfasciatus"    "longa"           "commersonii"     "flaviguttatum"  
## [65] "sexfasciatum"    "guttatus"        "narinari"        "brachysomus"    
## [69] "meleagris"       "halleri"         "mento"           "interruptus"    
## [73] "discolor"        "grammaticum"     "dovii"           "arcifrons"      
## [77] "dermatolepis"    "cornutus"        "berndti"         "flavimarginatus"
## [81] "panamaensis"     "dorsalis"        "cuvier"          "monoceros"      
## [85] "nebulosa"        "inermis"         "speciosus"       "unami"          
## [89] "hispidus"        "zonipectus"      "xenarcha"        "olfax"          
## [93] "falciformis"     "albacares"       "hystrix"         "aratus"
# Bucle sapply

n_obs <- sapply(X = spp, FUN = function(X){
    obs <- sum(datos_camaras$MaxN[datos_camaras$Species == X]) #observaciones como la suma de los individuos obs por spp
    
})

n_obs 
##    xanthopterus     laticlavius       polylepis      naufragium          verres 
##             145              25              26               3              21 
##         azaleus        caballus     bipinnulata       humeralis    nigrirostris 
##              23             370              23              10              15 
##     holocanthus     maculicauda   steindachneri         elegans     diplotaenia 
##              13             552              11              18              10 
##      chierchiae        dispilus       melanotis        nicholsi      taeniourus 
##               2             123               1               2               1 
##       lucasanum  argentiventris        scriptus        dentatus       castaneus 
##              31              78               1              42               5 
##          passer      troschelii      atrilobata   acapulcoensis      flavilatus 
##              10              50             625               8               6 
##         ghobban  rubroviolaceus      panamensis     labriformis         colonus 
##              38               6               3              10             213 
##     psittacinus   punctatissima          lewini        maculata           audax 
##               4               5              14              72               1 
##      melampygus           mydas      guentherii         viridis       nigricans 
##              50               6              10              43               3 
##           niger        lugubris      macarellus          obesus         ocyurus 
##              70               7               1              20               1 
##         jordani  novemfasciatus        ciliaris       rivoliana        limbatus 
##               4               6               5               9               4 
##          meyeni  albimarginatus    galapagensis       scudderii       refulgens 
##               7               6               6               2               3 
##    sexfasciatus           longa     commersonii   flaviguttatum    sexfasciatum 
##               1               2               8             318              20 
##        guttatus        narinari     brachysomus       meleagris         halleri 
##             112               2               4               5               2 
##           mento     interruptus        discolor     grammaticum           dovii 
##               7              12               1               3               1 
##       arcifrons    dermatolepis        cornutus         berndti flavimarginatus 
##              10              15               3               4               1 
##     panamaensis        dorsalis          cuvier       monoceros        nebulosa 
##               1               1               2               1               1 
##         inermis       speciosus           unami        hispidus      zonipectus 
##               9               8               5               2               1 
##        xenarcha           olfax     falciformis       albacares         hystrix 
##               1               4               2               1               1 
##          aratus 
##               1
obs.spp <- data.frame(n_obs)

2.7

Utilice bucles sapply para añadir el mínimo y máximo de la profundidad para cada una de las especies en el cuadro de datos creado en el ejercicio anterior (pistas: 1) asegúrese que la columna de profundidad es numérica antes de calcular las profundidades; 2) gsub(” m”, ““, vector); 3) gsub(”,“,”.”, vector); 4) as.numeric()). Las primeras 3 filas del cuadro de datos deben verse así:

# Profundidad como factor numerico
datos_camaras$Depth <- gsub(" m", "", gsub("\\,", ".", datos_camaras$Depth)) #se sustituyen caracteres en columna

datos_camaras$Depth  <- as.numeric(datos_camaras$Depth) # se define como numerico

# Bucles sapply
min_prof <- sapply(X = spp, function(x){
    min <- min(datos_camaras$Depth[datos_camaras$Species == x]) #extrae min
})

min_prof 
##    xanthopterus     laticlavius       polylepis      naufragium          verres 
##             6.4             9.6             9.6            10.0             6.4 
##         azaleus        caballus     bipinnulata       humeralis    nigrirostris 
##             9.6             9.6             6.4            10.0             9.6 
##     holocanthus     maculicauda   steindachneri         elegans     diplotaenia 
##             9.6            10.0            10.0            10.0            10.0 
##      chierchiae        dispilus       melanotis        nicholsi      taeniourus 
##            10.0             9.6            10.0            10.0            10.0 
##       lucasanum  argentiventris        scriptus        dentatus       castaneus 
##             9.6            10.0            10.0            10.0             9.6 
##          passer      troschelii      atrilobata   acapulcoensis      flavilatus 
##             9.6             9.6             9.6             9.6             9.6 
##         ghobban  rubroviolaceus      panamensis     labriformis         colonus 
##             9.6             6.4            10.0            10.0             9.6 
##     psittacinus   punctatissima          lewini        maculata           audax 
##            10.0             9.6            10.0             6.4            10.0 
##      melampygus           mydas      guentherii         viridis       nigricans 
##             6.4             9.6             9.6            21.0             6.4 
##           niger        lugubris      macarellus          obesus         ocyurus 
##             6.4             6.4             6.4             6.4             6.4 
##         jordani  novemfasciatus        ciliaris       rivoliana        limbatus 
##             6.4             6.4            23.6             9.6            23.6 
##          meyeni  albimarginatus    galapagensis       scudderii       refulgens 
##            23.4            23.6            23.6            23.6             9.6 
##    sexfasciatus           longa     commersonii   flaviguttatum    sexfasciatum 
##            10.0            10.0             9.6             9.6            10.0 
##        guttatus        narinari     brachysomus       meleagris         halleri 
##            10.0             9.6            10.0             9.6            10.0 
##           mento     interruptus        discolor     grammaticum           dovii 
##            23.6            23.6            23.6            23.4            23.6 
##       arcifrons    dermatolepis        cornutus         berndti flavimarginatus 
##            23.4            23.6            23.4            23.4            23.4 
##     panamaensis        dorsalis          cuvier       monoceros        nebulosa 
##            23.4            23.4            28.0            17.0            17.0 
##         inermis       speciosus           unami        hispidus      zonipectus 
##             9.6             9.6             9.6             9.6            18.6 
##        xenarcha           olfax     falciformis       albacares         hystrix 
##            18.6            31.6            28.0            28.0            13.0 
##          aratus 
##            13.0
max_prof  <- sapply(X = spp, function(x){
    max <- max(datos_camaras$Depth[datos_camaras$Species == x]) #extrae max
})

max_prof 
##    xanthopterus     laticlavius       polylepis      naufragium          verres 
##            31.6            31.6            30.0            18.6            21.0 
##         azaleus        caballus     bipinnulata       humeralis    nigrirostris 
##            17.0            28.1            30.0            18.6            18.6 
##     holocanthus     maculicauda   steindachneri         elegans     diplotaenia 
##            17.0            18.6            10.0            10.0            23.6 
##      chierchiae        dispilus       melanotis        nicholsi      taeniourus 
##            10.0            23.6            10.0            10.0            10.0 
##       lucasanum  argentiventris        scriptus        dentatus       castaneus 
##            23.6            31.6            10.0            30.0            13.0 
##          passer      troschelii      atrilobata   acapulcoensis      flavilatus 
##            23.6            18.6            13.0            10.0            18.6 
##         ghobban  rubroviolaceus      panamensis     labriformis         colonus 
##            18.6            31.6            23.6            23.6            31.6 
##     psittacinus   punctatissima          lewini        maculata           audax 
##            10.0            13.0            30.0            31.6            10.0 
##      melampygus           mydas      guentherii         viridis       nigricans 
##            31.6            21.0            23.6            23.4            31.6 
##           niger        lugubris      macarellus          obesus         ocyurus 
##            31.6            31.6             6.4            31.6             6.4 
##         jordani  novemfasciatus        ciliaris       rivoliana        limbatus 
##             6.4            23.6            31.6            31.6            28.1 
##          meyeni  albimarginatus    galapagensis       scudderii       refulgens 
##            31.6            30.0            31.6            28.1             9.6 
##    sexfasciatus           longa     commersonii   flaviguttatum    sexfasciatum 
##            10.0            17.0            23.6            17.0            18.6 
##        guttatus        narinari     brachysomus       meleagris         halleri 
##            17.0            10.0            17.0            17.0            17.0 
##           mento     interruptus        discolor     grammaticum           dovii 
##            31.6            30.0            23.6            23.6            23.6 
##       arcifrons    dermatolepis        cornutus         berndti flavimarginatus 
##            23.6            31.6            31.6            23.4            23.4 
##     panamaensis        dorsalis          cuvier       monoceros        nebulosa 
##            23.4            23.4            30.0            17.0            17.0 
##         inermis       speciosus           unami        hispidus      zonipectus 
##            13.0            18.6            18.6            18.6            18.6 
##        xenarcha           olfax     falciformis       albacares         hystrix 
##            18.6            31.6            28.0            28.0            13.0 
##          aratus 
##            13.0
obs.spp <- data.frame(n_obs, min_prof, max_prof) # se adjuntan a base de datos

2.8

Calcule el rango de profundidad (i.e. la diferencia entre el mínimo y el máximo de la profundidad) para cada especie y añádalo como una columna al cuadro de datos creado en el ejercicio 5. Las primeras 3 filas del cuadro de datos deben verse así:

rango_prof <- obs.spp$max_prof - obs.spp$min_prof #calculo de rango

obs.spp$rango_prof <- round(rango_prof, 2) # adjunta rango redondeado a dos dig a base

2.9 Resultados

Incluya el cuadro de datos generado en los ejercicios 5 a 7 como una tabla en su reporte usando la función DT del paquete datatable.

datatable(obs.spp)

3 Enlace