Repository 'pampa_glmcomm'
hg clone https://toolshed.g2.bx.psu.edu/repos/ecology/pampa_glmcomm

Changeset 0:f0dc3958e65d (2020-07-21)
Next changeset 1:61cc30e94df4 (2020-07-22)
Commit message:
"planemo upload for repository https://github.com/ColineRoyaux/PAMPA-Galaxy commit 07f1028cc764f920b1e6419c151f04ab4e3600fa"
added:
FunctExeCalcGLMGalaxy.r
FunctPAMPAGalaxy.r
PAMPA_GLM.xml
pampa_macros.xml
test-data/Community_metrics_cropped.tabular
test-data/GLM_table_community_on_Community_metrics_cropped.tabular
test-data/Simple_statistics_on_Community_metrics_cropped.txt
test-data/Unitobs.tabular
b
diff -r 000000000000 -r f0dc3958e65d FunctExeCalcGLMGalaxy.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FunctExeCalcGLMGalaxy.r Tue Jul 21 06:00:31 2020 -0400
[
b'@@ -0,0 +1,277 @@\n+#Rscript \r\n+\r\n+#####################################################################################################################\r\n+#####################################################################################################################\r\n+################################# Compute a Generalized Linear Model from your data #################################\r\n+#####################################################################################################################\r\n+#####################################################################################################################\r\n+\r\n+###################### Packages\r\n+suppressMessages(library(multcomp))\r\n+suppressMessages(library(glmmTMB)) ###Version: 0.2.3\r\n+suppressMessages(library(gap)) \r\n+\r\n+###################### Load arguments and declaring variables\r\n+\r\n+args = commandArgs(trailingOnly=TRUE)\r\n+#options(encoding = "UTF-8")\r\n+\r\n+if (length(args) < 10) {\r\n+    stop("At least 4 arguments must be supplied : \\n- two input dataset files (.tabular) : metrics table and unitobs table \\n- Interest variable field from metrics table \\n- Response variable from unitobs table.", call.=FALSE) #si pas d\'arguments -> affiche erreur et quitte / if no args -> error and exit1\r\n+\r\n+} else {\r\n+    Importdata <- args[1] ###### file name : metrics table\r\n+    ImportUnitobs <- args[2] ###### file name : unitobs informations\r\n+    colmetric <- as.numeric(args[3]) ###### Selected interest metric for GLM\r\n+    listFact <- strsplit(args [4],",")[[1]] ###### Selected response factors for GLM\r\n+    listRand <- strsplit(args [5],",")[[1]] ###### Selected randomized response factors for GLM\r\n+    colFactAna <- args[6] ####### (optional) Selected splitting factors for GLMs\r\n+    Distrib <- args[7] ###### (optional) Selected distribution for GLM \r\n+    log <- args[8] ###### (Optional) Log on interest metric ?\r\n+    aggreg <- args[9] ###### Aggregation level of the data table\r\n+    source(args[10]) ###### Import functions\r\n+\r\n+}\r\n+#### Data must be a dataframe with at least 3 variables : unitobs representing location and year ("observation.unit"), species code ("species.code") and abundance ("number")\r\n+\r\n+\r\n+#Import des donn\xc3\xa9es / Import data \r\n+obs<- read.table(Importdata,sep="\\t",dec=".",header=TRUE,encoding="UTF-8") #\r\n+obs[obs == -999] <- NA \r\n+metric <- colnames(obs)[colmetric]\r\n+tabUnitobs <- read.table(ImportUnitobs,sep="\\t",dec=".",header=TRUE,encoding="UTF-8")\r\n+tabUnitobs[tabUnitobs == -999] <- NA \r\n+\r\n+if (colFactAna != "None")\r\n+{\r\n+    FactAna <- colnames(tabUnitobs)[as.numeric(colFactAna)]\r\n+    if (class(tabUnitobs[FactAna]) == "numeric" || FactAna == "observation.unit"){stop("Wrong chosen separation factor : Analysis can\'t be separated by observation unit or numeric factor")}\r\n+}else{\r\n+    FactAna <- colFactAna\r\n+}\r\n+\r\n+\r\n+#factors <- fact.det.f(Obs=obs)\r\n+\r\n+vars_data1<- NULL\r\n+err_msg_data1<-"The input metrics dataset doesn\'t have the right format. It needs to have at least the following 2 variables :\\n- observation.unit (or year and site)\\n- numeric or integer metric\\n"\r\n+check_file(obs,err_msg_data1,vars_data1,2)\r\n+\r\n+vars_data2 <- c(listFact,listRand)\r\n+err_msg_data2<-"The input unitobs dataset doesn\'t have the right format. It needs to have at least the following 2 variables :\\n- observation.unit (or year and site)\\n- factors used in GLM (habitat, year and/or site)\\n"\r\n+check_file(tabUnitobs,err_msg_data2,vars_data2[vars_data2 != "None"],2)\r\n+\r\n+####################################################################################################\r\n+########## Computing Generalized Linear Model ## Function : modeleLineaireWP2.unitobs.f ############\r\n+####################################################################################################\r\n+\r\n+modeleLineaireWP2.unitobs.f <- function(metrique, listFact, listRand, FactAna, Distrib, log=FALSE, tabMetrics, tableMetrique, tabUnitobs, unitobs="observation.unit", nbName="number")\r\n+{\r\n+ '..b'                                   }))},\r\n+               colcoef <- unlist(lapply(c("(Intercept)",lev),\r\n+                                        FUN=function(x){lapply(c("Estimate","Std.Err","Zvalue","Pvalue","signif"),\r\n+                                                               FUN=function(y){paste(x,y,collapse = ":")\r\n+                                                                              })\r\n+                                                       })))\r\n+\r\n+    }  \r\n+  \r\n+    TabSum[,colcoef] <- NA\r\n+\r\n+    ### creating rate table \r\n+    TabRate <- data.frame(analysis=c("global", Anacut), complete_plan=NA, balanced_plan=NA, NA_proportion_OK=NA, no_residual_dispersion=NA, uniform_residuals=NA, outliers_proportion_OK=NA, no_zero_inflation=NA, observation_factor_ratio_OK=NA, enough_levels_random_effect=NA, rate=NA)\r\n+\r\n+    for (cut in Anacut) \r\n+    {\r\n+        cutData <- tmpData[grep(cut,tmpData[,FactAna]),]\r\n+        cutData <- dropLevels.f(cutData)\r\n+\r\n+        res <-""\r\n+\r\n+        if (listRand[1] != "None")\r\n+        {\r\n+            res <- tryCatch(glmmTMB(exprML,family=loiChoisie, data=cutData), error=function(e){})\r\n+        }else{\r\n+            res <- tryCatch(glm(exprML,data=cutData,family=loiChoisie), error=function(e){})\r\n+        }\r\n+\r\n+          ## Write results :\r\n+         if (! is.null(res))\r\n+         {\r\n+            TabSum <- sortiesLM.f(objLM=res, TabSum=TabSum, metrique=metrique,\r\n+                                  factAna=factAna, cut=cut, colAna="analysis", lev=lev, #modSel=iFactGraphSel, listFactSel=listFactSel,\r\n+                                  listFact=listFact,\r\n+                                  Data=cutData, #Log=Log,\r\n+                                  type=ifelse(tableMetrique == "unitSpSz" && factAna != "size.class",\r\n+                                              "CL_unitobs",\r\n+                                              "unitobs"))\r\n+\r\n+            TabRate[TabRate[,"analysis"]==cut,c(2:11)] <- noteGLM.f(data=cutData, objLM=res, metric=metrique, listFact=listFact, details=TRUE)\r\n+\r\n+        }else{\r\n+            cat("\\nCannot compute GLM for level",cut,"Check if one or more factor(s) have only one level, or try with another distribution for the model in advanced settings \\n\\n")\r\n+        }\r\n+\r\n+    }\r\n+\r\n+    ## Global analysis : \r\n+\r\n+    if (listRand[1] != "None")\r\n+    {\r\n+        resG <- glmmTMB(exprML,family=loiChoisie, data=tmpData)\r\n+    }else{\r\n+        resG <- glm(exprML,data=tmpData,family=loiChoisie)\r\n+    }\r\n+\r\n+    ## write results :\r\n+    TabSum <- sortiesLM.f(objLM=resG, TabSum=TabSum, metrique=metrique,\r\n+                          factAna=factAna, cut="global", colAna="analysis", lev=lev, #modSel=iFactGraphSel, listFactSel=listFactSel,\r\n+                          listFact=listFact,\r\n+                          Data=tmpData, #Log=Log,\r\n+                          type=ifelse(tableMetrique == "unitSpSz" && factAna != "size.class",\r\n+                                      "CL_unitobs",\r\n+                                      "unitobs"))\r\n+\r\n+    TabRate[TabRate[,"analysis"]=="global",c(2:11)] <- noteGLM.f(data=tmpData, objLM=resG, metric=metrique, listFact=listFact, details=TRUE)\r\n+    noteGLMs.f(tabRate=TabRate,exprML=exprML,objLM=resG, file_out=TRUE)\r\n+    ## simple statistics and infos :\r\n+    filename <- "GLMSummaryFull.txt"\r\n+\r\n+    ## Save data on model :\r\n+        \r\n+    infoStats.f(filename=filename, Data=tmpData, agregLevel=aggreg, type="stat",\r\n+                metrique=metrique, factGraph=factAna, #factGraphSel=modSel,\r\n+                listFact=listFact)#, listFactSel=listFactSel)\r\n+\r\n+    return(TabSum)\r\n+\r\n+}\r\n+\r\n+################# Analysis\r\n+\r\n+Tab <- modeleLineaireWP2.unitobs.f(metrique=metric, listFact=listFact, listRand=listRand, FactAna=FactAna, Distrib=Distrib, log=log, tabMetrics=obs, tableMetrique=aggreg, tabUnitobs=tabUnitobs, nbName="number")\r\n+\r\n+write.table(Tab,"GLMSummary.tabular", row.names=FALSE, sep="\\t", dec=".",fileEncoding="UTF-8")\r\n'
b
diff -r 000000000000 -r f0dc3958e65d FunctPAMPAGalaxy.r
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FunctPAMPAGalaxy.r Tue Jul 21 06:00:31 2020 -0400
[
b'@@ -0,0 +1,3568 @@\n+#Rscript\n+\n+\n+##################################################################################################################################\n+####################### PAMPA Galaxy tools functions : Calculate metrics, compute GLM and plot   #################################\n+##################################################################################################################################\n+\n+#### Based on Yves Reecht R script\n+#### Modified by Coline ROYAUX for integrating within Galaxy-E\n+\n+######################################### start of the function fact.def.f called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Define the finest aggregation with the observation table\n+\n+fact.det.f <- function (Obs,\n+                        size.class="size.class",\n+                        code.especes="species.code",\n+                        unitobs="observation.unit")\n+{\n+    if (any(is.element(c(size.class), colnames(obs))) && all(! is.na(obs[, size.class])))\n+        {\n+            factors <- c(unitobs, code.especes, size.class)\n+        }else{\n+            factors <- c(unitobs, code.especes)\n+        }\n+    return(factors)\n+}\n+\n+######################################### end of the function fact.def.f \n+\n+######################################### start of the function def.typeobs.f called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Define observation type from colnames\n+\n+def.typeobs.f <- function(Obs)\n+{\n+    if (any(is.element(c("rotation","rot","rotate"),colnames(obs))))\n+    {\n+        ObsType <- "SVR"\n+    }else{\n+        ObsType <- "other"\n+    }\n+    return(ObsType)\n+}\n+######################################### end of the function fact.def.f \n+\n+######################################### start of the function create.unitobs called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### Create unitobs column when inexistant\n+create.unitobs <- function(data,year="year",point="point", unitobs="observation.unit")\n+{\n+    if (is.element(paste(unitobs),colnames(data)) && all(grepl("[1-2][0|8|9][0-9]{2}_.*",data[,unitobs])==FALSE))\n+    {\n+        unitab <- data\n+\n+    }else{ \n+\n+        unitab <- unite(data,col="observation.unit",c(year,point))\n+    }\n+    return(unitab)\n+}\n+######################################### start of the function create.unitobs\n+\n+######################################### start of the function create.year.point called by FunctExeCalcCommIndexesGalaxy.r and FunctExeCalcPresAbsGalaxy.r\n+####### separate unitobs column when existant\n+create.year.point <- function(data,year="year",point="point", unitobs="observation.unit")\n+{\n+    if (all(grepl("[1-2][0|8|9][0-9]{2}_.*",data[,unitobs]))==TRUE)\n+    {\n+        tab <- separate(data,col=unitobs,into=c(year,point),sep="_")\n+    }else{\n+        tab <- separate(data,col=unitobs,into=c("site1", year,"obs"),sep=c(2,4))\n+        tab <- unite(tab, col=point, c("site1","obs"))\n+\n+    }\n+\n+    tab <- cbind(tab,observation.unit = data[,unitobs])\n+\n+    return(tab)\n+}\n+######################################### start of the function create.unitobs\n+\n+######################################### start of the function check_file called by every Galaxy Rscripts\n+\n+check_file<-function(dataset,err_msg,vars,nb_vars){\n+\n+    ## Purpose: General function to check integrity of input file. Will \n+    ##          check numbers and contents of variables(colnames).\n+    ##          return an error message and exit if mismatch detected\n+    ## ----------------------------------------------------------------------\n+    ## Arguments: dataset : dataset name\n+    ##            err_msg : output error\n+    ##            vars : expected name of variables\n+    ##            nb_vars : expected number of variables\n+    ## ----------------------------------------------------------------------\n+    ## Author: Alan Amosse, Benjamin Yguel \n+\n+    if(ncol(dataset) < nb_vars){ #checking for r'..b'+  plot(predict(fittedModel), resid(fittedModel, type = "response") , main = "Raw residuals" , ylab = "Residual", xlab = "Predicted")\n+  mtext("Conventional residual plots", outer = T)\n+}\n+\n+\n+\n+\n+#\n+#\n+# if(quantreg == F){\n+#\n+#   lines(smooth.spline(simulationOutput$fittedPredictedResponse, simulationOutput$scaledResiduals, df = 10), lty = 2, lwd = 2, col = "red")\n+#\n+#   abline(h = 0.5, col = "red", lwd = 2)\n+#\n+# }else{\n+#\n+#   #library(gamlss)\n+#\n+#   # qrnn\n+#\n+#   # http://r.789695.n4.nabble.com/Quantile-GAM-td894280.html\n+#\n+#   #require(quantreg)\n+#   #dat <- plyr::arrange(dat,pred)\n+#   #fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.5,data = dat)\n+#\n+#   probs = c(0.25, 0.50, 0.75)\n+#\n+#   w <- p <- list()\n+#   for(i in seq_along(probs)){\n+#     capture.output(w[[i]] <- qrnn::qrnn.fit(x = as.matrix(simulationOutput$fittedPredictedResponse), y = as.matrix(simulationOutput$scaledResiduals), n.hidden = 4, tau = probs[i], iter.max = 1000, n.trials = 1, penalty = 1))\n+#     p[[i]] <- qrnn::qrnn.predict(as.matrix(sort(simulationOutput$fittedPredictedResponse)), w[[i]])\n+#   }\n+#\n+#\n+#\n+#   #plot(simulationOutput$fittedPredictedResponse, simulationOutput$scaledResiduals, xlab = "Predicted", ylab = "Residual", main = "Residual vs. predicted\\n lines should match", cex.main = 1)\n+#\n+#   #lines(sort(simulationOutput$fittedPredictedResponse), as.vector(p[[1]]), col = "red")\n+#\n+#   matlines(sort(simulationOutput$fittedPredictedResponse), matrix(unlist(p), nrow = length(simulationOutput$fittedPredictedResponse), ncol = length(p)), col = "red", lty = 1)\n+#\n+#   #     as.vector(p[[1]])\n+#   #\n+#   #\n+#   #     lines(simulationOutput$fittedPredictedResponse,p[[1]], col = "red", lwd = 2)\n+#   #     abline(h = 0.5, col = "red", lwd = 2)\n+#   #\n+#   #     fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.25,data = dat)\n+#   #     lines(unique(dat$pred)[-1],fit$coef[1] + fit$coef[-1], col = "green", lwd = 2, lty =2)\n+#   #     abline(h = 0.25, col = "green", lwd = 2, lty =2)\n+#   #\n+#   #     fit<-quantreg::rqss(resid~qss(pred,constraint="N"),tau=0.75,data = dat)\n+#   #     lines(unique(dat$pred)[-1],fit$coef[1] + fit$coef[-1], col = "blue", lwd = 2, lty = 2)\n+#   #     abline(h = 0.75, col = "blue", lwd = 2, lty =2)\n+# }\n+\n+####################### plot.R\n+\n+####################### random.R\n+\n+#\' Record and restore a random state\n+#\' \n+#\' The aim of this function is to record, manipualate and restor a random state\n+#\' \n+#\' @details This function is intended for two (not mutually exclusive tasks)\n+#\' \n+#\' a) record the current random state\n+#\' \n+#\' b) change the current random state in a way that the previous state can be restored\n+#\' \n+#\' @return a list with various infos about the random state that after function execution, as well as a function to restore the previous state before the function execution\n+#\' \n+#\' @param seed seed argument to set.seed(). NULL = no seed, but random state will be restored. F = random state will not be restored\n+#\' @export\n+#\' @example inst/examples/getRandomStateHelp.R\n+#\' @author Florian Hartig\n+#\' \n+getRandomState <- function(seed = NULL){\n+  \n+  # better to explicitly access the global RS?\n+  # current = get(".Random.seed", .GlobalEnv, ifnotfound = NULL)\n+  \n+  current = mget(".Random.seed", envir = .GlobalEnv, ifnotfound = list(NULL))[[1]]\n+  \n+  if(is.logical(seed) & seed == F){\n+    restoreCurrent <- function(){}    \n+  }else{\n+    restoreCurrent <- function(){\n+      if(is.null(current)) rm(".Random.seed", envir = .GlobalEnv) else assign(".Random.seed", current , envir = .GlobalEnv)\n+    }    \n+  }\n+\n+  # setting seed\n+  if(is.numeric(seed)) set.seed(seed)\n+\n+  # ensuring that RNG has been initialized\n+  if (is.null(current))runif(1) \n+  \n+  randomState = list(seed, state = get(".Random.seed", globalenv()), kind = RNGkind(), restoreCurrent = restoreCurrent)  \n+  return(randomState)\n+}\n+\n+####################### random.R\n+\n+######################################### Package DHARMa\n'
b
diff -r 000000000000 -r f0dc3958e65d PAMPA_GLM.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PAMPA_GLM.xml Tue Jul 21 06:00:31 2020 -0400
[
@@ -0,0 +1,143 @@
+<tool id="pampa_glmcomm" name="Compute GLM on community data" version="@VERSION@">
+    <description>Compute a GLM of your choice on community data</description>
+    <macros>
+        <import>pampa_macros.xml</import>
+    </macros>
+    <expand macro="GLM_requirements"/>
+    <command detect_errors="exit_code"><![CDATA[
+        Rscript 
+         '$__tool_directory__/FunctExeCalcGLMGalaxy.r' 
+         '$input_metric'
+         '$input_unitobs'
+         '$varint'
+         '$varrep'
+         '$varrand'
+         '$sep'
+         #if $settings.advanced=='advanced' 
+             $settings.distrib
+             'FALSE'
+         #else
+             'None'
+             'FALSE'
+         #end if
+         'unit'
+         '$__tool_directory__/FunctPAMPAGalaxy.r' 
+         '$output_summary'
+         '$output_recap'
+    ]]>
+    </command>
+    <inputs>
+        <expand macro="pampa_input_GLM"/>
+        <param name="sep" type="data_column" data_ref="input_unitobs" force_select="false" label="Separation factor of your analysis from unitobs file" help= "Choose the field of the separation factor, for each level of this factor, one GLM will be computed."/>
+        <expand macro="pampa_var_GLM"/>
+        <conditional name="settings">
+            <expand macro="pampa_advanced_params_select_GLM"/>
+        </conditional>
+    </inputs>
+    <outputs>
+        <data name="output_summary" from_work_dir="GLMSummary.tabular" format="tabular" label="GLM - Results from your community analysis on ${on_string}"/>
+        <expand macro="pampa_output_GLM"/>
+    </outputs>
+    <tests>
+        <test>
+            <param name="input_metric" value="Community_metrics_cropped.tabular"/>
+            <param name="input_unitobs" value="Unitobs.tabular"/>
+            <param name="varint" value="4"/>
+            <param name="varrep" value="year,site,habitat"/>
+            <param name="varrand" value="site"/>
+            <param name="sep" value="22"/>
+            <param name="advanced" value="simple"/>
+            <output name="output_summary">
+                <assert_contents> 
+                    <has_n_lines n="9"/>
+                </assert_contents> 
+            </output>
+            <output name="output_recap">
+                <assert_contents>
+                    <has_n_lines n="413"/>
+                </assert_contents> 
+            </output>
+            <output name="output_rate">
+                <assert_contents> 
+                    <has_n_lines n="51"/>
+                </assert_contents> 
+            </output>
+        </test>
+    </tests>
+    <help><![CDATA[
+==============================================================
+Compute GLM on community data with selected interest variables
+==============================================================
+
+**What it does**
+
+This tool from PAMPA toolsuite computes Generalized Linear Models on community data. 
+
+It allows user to choose composition of the model :
+
+- Interest variable among numeric or integer variables of the input file
+
+- Response variables among year, site and/or habitat
+
+- Allocation of random effect on year and/or site
+
+|
+
+**Input description**
+
+A tabular file with community data. Must at least contain two or three columns depending on the case : 
+
+- ['year' and 'location'] or ['observation.unit'] 
+
+- At least one community metric 
+
++------------------+---------+---------+-----+       
+| observation.unit | metric1 | metric2 | ... |            
++==================+=========+=========+=====+        
+|   site_yearID    |    2    |   0.4   | ... |            
++------------------+---------+---------+-----+        
+|        ...       |   ...   |   ...   | ... |       
++------------------+---------+---------+-----+           
+
+OR
+
++------+----------+---------+---------+-----+
+| year | location | metric1 | metric2 | ... |
++======+==========+=========+=========+=====+
+| 2000 |locationID|    2    |   0.4   | ... |
++------+----------+---------+---------+-----+
+|  ... |    ...   |   ...   |   ...   | ... |
++------+----------+---------+---------+-----+
+
+The first input may be extracted from the 'Calculate community metrics' tool.
+
+A tabular file with unitobs or location data which contains at least as much columns as used response variables and separation factor in addition with the 'observation.unit' or 'location' column.
+
++--------------------------------+---------+--------+------------+-----+       
+| observation.unit OR location   | ??site? |  year  |  habitat   | ... |            
++================================+=========+========+============+=====+        
+|  site_yearID     OR locationID | site ID |  2000  | habitatID  | ... |            
++--------------------------------+---------+--------+------------+-----+        
+|              ...               |   ...   |   ...  |     ...    | ... |       
++--------------------------------+---------+--------+------------+-----+ 
+
+|
+
+**Output**
+
+Two text files : 
+
+- A first text file with GLM results. When a separation factor is selected, one analysis is computed for every level and the last analysis is on the whole dataset.
+
+- A second text file with simple statistics on the whole dataset.
+
+|
+
+**Source**
+
+Derived from PAMPA scripts (https://wwz.ifremer.fr/pampa/Meth.-Outils/Outils) written by Yves Reecht.
+
+  ]]></help>
+
+  <expand macro="pampa_bibref" />
+</tool>
b
diff -r 000000000000 -r f0dc3958e65d pampa_macros.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pampa_macros.xml Tue Jul 21 06:00:31 2020 -0400
b
@@ -0,0 +1,82 @@
+<macros>
+    <token name="@VERSION@">0.0.1</token>
+    <xml name="Pampa_requirements">
+        <requirements>
+            <requirement type="package" version="1.0.2">r-tidyr</requirement>
+        </requirements>    
+    </xml>
+    <xml name="GLM_requirements">
+        <requirements>
+            <requirement type="package" version="1.2.2">r-gap</requirement>
+            <requirement type="package" version="1.0.1">r-glmmtmb</requirement>
+            <requirement type="package" version="1.4_13">r-multcomp</requirement>
+        </requirements>    
+    </xml>
+    <xml name="Plot_requirements">
+        <requirements>
+            <requirement type="package" version="3.1.1">r-ggplot2</requirement>
+        </requirements>    
+    </xml>
+    <xml name="pampa_input_calculate">
+        <param name="input" type="data" format="tabular" label="Input file" help="Observation data file, with location, year, species and abundance."/>
+    </xml>
+    <xml name="pampa_advanced_params_select">
+        <param name="advanced" type="select" label="Specify advanced parameters">
+            <option value="simple" selected="true">No, use program defaults.</option>
+            <option value="advanced">Yes, see full parameter list.</option>
+        </param>        
+        <when value="simple">
+        </when>        
+    </xml>
+    <xml name="pampa_advanced_params_select_GLM">
+        <param name="advanced" type="select" label="Specify advanced parameters">
+            <option value="simple" selected="true">No, use program defaults.</option>
+            <option value="advanced">Yes, see full parameter list.</option>
+        </param>        
+        <when value="simple">
+        </when>        
+        <when value="advanced">
+            <param name="distrib" type="select" label="Distribution for model">
+                <option selected="true" value="None">Auto</option>
+                <option value="gaussian">Gaussian</option>
+                <option value="inverse.gaussian">Inverse Gaussian</option>
+                <option value="poisson">Poisson</option>
+                <option value="quasipoisson">Quasi-Poisson</option>
+                <option value="binomial">Binomial</option>
+                <option value="quasibinomial">Quasi-Binomial</option>
+                <option value="Gamma">Gamma</option>
+            </param>
+        </when>
+    </xml>
+    <xml name="pampa_input_GLM">
+        <param name="input_metric" type="data" format="tabular" label="Input metrics file" help="Metrics data file, with location, year, and metrics informations that can be used as interest variable."/>
+        <param name="input_unitobs" type="data" format="tabular" label="Unitobs informations file" help="Unitobs file, with all informations available about unitobs."/>
+        <param name="varint" type="data_column" data_ref="input_metric" label="Interest variable from metrics file" help= "Choose the field of the interest variable."/>
+    </xml>
+    <xml name="pampa_var_GLM">
+        <param name="varrep" type="select" label="Response variables" help= "Choose the response variables you want to include in your analysis." multiple="true">
+            <option selected="true" value="year">Year</option>
+            <option selected="true" value="site">Site</option>
+            <option selected="true" value="habitat">Habitat</option>
+        </param>
+        <param name="varrand" type="select" label="Random effect ?" help="Allocate a random effect on site or year makes your model more reliable as random events on a peculiar site or year can affect populations, it takes account of pseudoreplication. However, avoid applying it on a less than 10 levels variable (less than 10 different sites and/or year)." multiple="true">
+            <option value="year">Year</option>
+            <option selected="true" value="site">Site</option>
+        </param>
+    </xml>
+    <xml name="pampa_output_GLM">
+        <data name="output_recap" from_work_dir="GLMSummaryFull.txt" format="txt" label="Simple statistics on chosen variables on ${on_string}"/>
+        <data name="output_rate" from_work_dir="RatingGLM.txt" format="txt" label="Your analysis rating file on ${on_string}"/>
+    </xml>
+    <xml name="pampa_bibref">
+        <citations>
+            <citation type="bibtex">
+     @unpublished{pampayves,
+     title={ PAMPA "ressources et biodiversité" scripts },
+            author={Yves Reecht},
+            url={https://wwz.ifremer.fr/pampa/Meth.-Outils/Outils}
+            }
+            </citation>
+        </citations>
+    </xml>
+</macros>
b
diff -r 000000000000 -r f0dc3958e65d test-data/Community_metrics_cropped.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Community_metrics_cropped.tabular Tue Jul 21 06:00:31 2020 -0400
b
b'@@ -0,0 +1,712 @@\n+"point"\t"year"\t"number"\t"species.richness"\t"simpson"\t"simpson.l"\t"shannon"\t"pielou"\t"hill"\t"observation.unit"\n+"AB_0008"\t"08"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB080008"\n+"AB_0015"\t"08"\t3\t1\t1\t0\t0\tNA\t0\t"AB080015"\n+"AB_0027"\t"08"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB080027"\n+"AB_0031"\t"08"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB080031"\n+"AB_0037"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"AB080037"\n+"AB_0042"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"AB080042"\n+"AB_0057"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"AB080057"\n+"AB_0076"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090076"\n+"AB_0081"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090081"\n+"AB_0095"\t"09"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090095"\n+"AB_0097"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090097"\n+"AB_0098"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090098"\n+"AB_0104"\t"09"\t1.2\t1\t1\t0\t0\tNA\t0\t"AB090104"\n+"AB_0105"\t"09"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090105"\n+"AB_0106"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"AB090106"\n+"AB_0120"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090120"\n+"AB_0121"\t"09"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090121"\n+"AB_0122"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090122"\n+"AB_0123"\t"09"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB090123"\n+"AB_0124"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090124"\n+"AB_0125"\t"09"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090125"\n+"AB_0126"\t"09"\t4.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090126"\n+"AB_0127"\t"09"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB090127"\n+"AB_0132"\t"09"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB090132"\n+"AB_0133"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"AB090133"\n+"AB_0134"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"AB090134"\n+"AB_0135"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090135"\n+"AB_0143"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090143"\n+"AB_0148"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090148"\n+"AB_0149"\t"09"\t3\t1\t1\t0\t0\tNA\t0\t"AB090149"\n+"AB_0151"\t"09"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB090151"\n+"AB_0601"\t"09"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB090601"\n+"AB_0602"\t"09"\t4.66666666666667\t2\t0.86734693877551\t0.13265306122449\t0.257318640543832\t0.371232326640876\t0.10255697699183\t"AB090602"\n+"AB_0603"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"AB090603"\n+"AB_0001"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100001"\n+"AB_0002"\t"10"\t4.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100002"\n+"AB_0006"\t"10"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100006"\n+"AB_0008"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100008"\n+"AB_0009"\t"10"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB100009"\n+"AB_0010"\t"10"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100010"\n+"AB_0011"\t"10"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100011"\n+"AB_0015"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100015"\n+"AB_0017"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100017"\n+"AB_0019"\t"10"\t1.5\t1\t1\t0\t0\tNA\t0\t"AB100019"\n+"AB_0020"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100020"\n+"AB_0021"\t"10"\t3\t1\t1\t0\t0\tNA\t0\t"AB100021"\n+"AB_0023"\t"10"\t5.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100023"\n+"AB_0024"\t"10"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100024"\n+"AB_0025"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100025"\n+"AB_0028"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100028"\n+"AB_0029"\t"10"\t7\t2\t0.909297052154195\t0.0907029478458048\t0.191444081957717\t0.276195427647939\t0.0748993922015743\t"AB100029"\n+"AB_0031"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100031"\n+"AB_0035"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100035"\n+"AB_0036"\t"10"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100036"\n+"AB_0038"\t"10"\t3\t1\t1\t0\t0\tNA\t0\t"AB100038"\n+"AB_0042"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100042"\n+"AB_0046"\t"10"\t4\t1\t1\t0\t0\tNA\t0\t"AB100046"\n+"AB_0047"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100047"\n+"AB_0048"\t"10"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100048"\n+"AB_0049"\t"10"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100049"\n+"AB_0052"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100052"\n+"AB_0055"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100055"\n+"AB_0060"\t"10"\t4.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100060"\n+"AB_0061"\t"10"\t2.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100061"\n+"AB_0062"\t"10"\t3.66666666666667\t2\t0.702479338842975\t0.297520661157025\t0.474139313057837\t0.684038435639042\t0.185182969156178\t"AB100062"\n+"AB_0072"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100072"\n+"AB_0077"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100077"\n+"AB_0078"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100078"\n+"AB_0079"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100079"\n+"AB_0081"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"AB100081"\n+"AB_0082"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100082"\n+"AB_0085"\t"10"\t2\t1\t1\t0\t0\tNA\t0\t"AB100085"\n+"AB_0086"\t"10"\t3.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100086"\n+"AB_0087"\t"10"\t1.66666666666667\t1\t1\t0\t0\tNA\t0\t"AB100087"\n+"AB_0088"\t"10"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"AB100088"\n+"AB_0089"\t"10"\t3\t1\t1\t0\t'..b'1\t0\t0\tNA\t0\t"PA170043"\n+"PA_0044"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170044"\n+"PA_0050"\t"17"\t2.66666666666667\t2\t0.53125\t0.46875\t0.661563238157982\t0.954434002924965\t0.241895626852958\t"PA170050"\n+"PA_0051"\t"17"\t1\t2\t0.5\t0.5\t0.693147180559945\t1\t0.25\t"PA170051"\n+"PA_0054"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170054"\n+"PA_0055"\t"17"\t2\t2\t0.5\t0.5\t0.693147180559945\t1\t0.25\t"PA170055"\n+"PA_0056"\t"17"\t4.66666666666667\t2\t0.755102040816326\t0.244897959183674\t0.410116318288409\t0.591672778582327\t0.162507688154577\t"PA170056"\n+"PA_0057"\t"17"\t10\t2\t0.935555555555555\t0.0644444444444447\t0.146144746008564\t0.210842300318532\t0.055682102748663\t"PA170057"\n+"PA_0058"\t"17"\t18\t1\t1\t0\t0\tNA\t0\t"PA170058"\n+"PA_0059"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170059"\n+"PA_0060"\t"17"\t6\t2\t0.802469135802469\t0.197530864197531\t0.348832095843032\t0.503258334775646\t0.139360311832599\t"PA170060"\n+"PA_0066"\t"17"\t2\t1\t1\t0\t0\tNA\t0\t"PA170066"\n+"PA_0068"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170068"\n+"PA_0074"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170074"\n+"PA_0079"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170079"\n+"PA_0080"\t"17"\t6.66666666666667\t2\t0.745\t0.255\t0.422709087805991\t0.6098403047164\t0.167093653955113\t"PA170080"\n+"PA_0081"\t"17"\t3\t2\t0.722222222222222\t0.277777777777778\t0.450561208866305\t0.650022421648354\t0.177019558178641\t"PA170081"\n+"PA_0083"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170083"\n+"PA_0084"\t"17"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"PA170084"\n+"PA_0088"\t"17"\t1.5\t1\t1\t0\t0\tNA\t0\t"PA170088"\n+"PA_0091"\t"17"\t1.66666666666667\t2\t0.68\t0.32\t0.500402423538188\t0.721928094887362\t0.194011720513331\t"PA170091"\n+"PA_0093"\t"17"\t1.5\t2\t0.555555555555556\t0.444444444444444\t0.636514168294813\t0.918295834054489\t0.235170526217511\t"PA170093"\n+"PA_0094"\t"17"\t3\t1\t1\t0\t0\tNA\t0\t"PA170094"\n+"PA_0100"\t"17"\t1\t1\t1\t0\t0\tNA\t0\t"PA170100"\n+"PE_0007"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140007"\n+"PE_0025"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140025"\n+"PE_0029"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140029"\n+"PE_0031"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140031"\n+"PE_0033"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"PE140033"\n+"PE_0035"\t"14"\t2.66666666666667\t2\t0.78125\t0.21875\t0.376770161256437\t0.543564443199596\t0.150078631085047\t"PE140035"\n+"PO_0001"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120001"\n+"PO_0004"\t"12"\t1.5\t1\t1\t0\t0\tNA\t0\t"PO120004"\n+"PO_0007"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120007"\n+"PO_0018"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120018"\n+"PO_0028"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120028"\n+"PO_0045"\t"12"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"PO120045"\n+"PO_0048"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120048"\n+"PO_0053"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120053"\n+"PO_0066"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120066"\n+"PO_0092"\t"12"\t6.16666666666667\t1\t1\t0\t0\tNA\t0\t"PO120092"\n+"PO_0094"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120094"\n+"PO_0096"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120096"\n+"PO_0121"\t"12"\t5\t1\t1\t0\t0\tNA\t0\t"PO120121"\n+"PO_0134"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120134"\n+"PO_0136"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120136"\n+"PO_0200"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120200"\n+"PO_0203"\t"12"\t3.6\t1\t1\t0\t0\tNA\t0\t"PO120203"\n+"PO_0205"\t"12"\t1\t1\t1\t0\t0\tNA\t0\t"PO120205"\n+"PO_0206"\t"12"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"PO120206"\n+"PO_0233"\t"12"\t2\t1\t1\t0\t0\tNA\t0\t"PO120233"\n+"RD_0219"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RD070219"\n+"RD_0230"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RD070230"\n+"RD_0031"\t"08"\t2\t1\t1\t0\t0\tNA\t0\t"RD080031"\n+"RD_0103"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090103"\n+"RD_0105"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090105"\n+"RD_0108"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090108"\n+"RD_0109"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RD090109"\n+"RD_0107"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"RD100107"\n+"RL_0250"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RL070250"\n+"RL_0145"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"RL080145"\n+"RL_0078"\t"09"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"RL090078"\n+"RL_0089"\t"09"\t2\t1\t1\t0\t0\tNA\t0\t"RL090089"\n+"RL_0093"\t"09"\t1\t1\t1\t0\t0\tNA\t0\t"RL090093"\n+"RL_0066"\t"10"\t1\t1\t1\t0\t0\tNA\t0\t"RL100066"\n+"RL_0076"\t"10"\t1.33333333333333\t1\t1\t0\t0\tNA\t0\t"RL100076"\n+"RS_0169"\t"07"\t2.33333333333333\t1\t1\t0\t0\tNA\t0\t"RS070169"\n+"RS_0189"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"RS070189"\n+"SI_0078"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070078"\n+"SI_0079"\t"07"\t8.33333333333333\t1\t1\t0\t0\tNA\t0\t"SI070079"\n+"SI_0080"\t"07"\t2\t1\t1\t0\t0\tNA\t0\t"SI070080"\n+"SI_0082"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070082"\n+"SI_0197"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070197"\n+"SI_0222"\t"07"\t1\t1\t1\t0\t0\tNA\t0\t"SI070222"\n+"SI_0194"\t"08"\t1\t1\t1\t0\t0\tNA\t0\t"SI080194"\n+"WA_0002"\t"14"\t1\t1\t1\t0\t0\tNA\t0\t"WA140002"\n'
b
diff -r 000000000000 -r f0dc3958e65d test-data/GLM_table_community_on_Community_metrics_cropped.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/GLM_table_community_on_Community_metrics_cropped.tabular Tue Jul 21 06:00:31 2020 -0400
b
@@ -0,0 +1,9 @@
+"analysis" "AIC" "BIC" "logLik" "deviance" "df.resid" "site Std.Dev" "site NbObservation" "site NbLevels" "(Intercept) Estimate" "(Intercept) Std.Err" "(Intercept) Zvalue" "(Intercept) Pvalue" "(Intercept) signif" "2007 Estimate" "2007 Std.Err" "2007 Zvalue" "2007 Pvalue" "2007 signif" "2008 Estimate" "2008 Std.Err" "2008 Zvalue" "2008 Pvalue" "2008 signif" "2009 Estimate" "2009 Std.Err" "2009 Zvalue" "2009 Pvalue" "2009 signif" "2010 Estimate" "2010 Std.Err" "2010 Zvalue" "2010 Pvalue" "2010 signif" "2012 Estimate" "2012 Std.Err" "2012 Zvalue" "2012 Pvalue" "2012 signif" "2013 Estimate" "2013 Std.Err" "2013 Zvalue" "2013 Pvalue" "2013 signif" "2014 Estimate" "2014 Std.Err" "2014 Zvalue" "2014 Pvalue" "2014 signif" "2015 Estimate" "2015 Std.Err" "2015 Zvalue" "2015 Pvalue" "2015 signif" "2017 Estimate" "2017 Std.Err" "2017 Zvalue" "2017 Pvalue" "2017 signif" "Algueraie Estimate" "Algueraie Std.Err" "Algueraie Zvalue" "Algueraie Pvalue" "Algueraie signif" "Corail vivant Estimate" "Corail vivant Std.Err" "Corail vivant Zvalue" "Corail vivant Pvalue" "Corail vivant signif" "Detritique Estimate" "Detritique Std.Err" "Detritique Zvalue" "Detritique Pvalue" "Detritique signif" "Fond lagonaire Estimate" "Fond lagonaire Std.Err" "Fond lagonaire Zvalue" "Fond lagonaire Pvalue" "Fond lagonaire signif" "Herbier Estimate" "Herbier Std.Err" "Herbier Zvalue" "Herbier Pvalue" "Herbier signif"
+"global" 1169.85553483615 1229.8072692927 -570.927767418076 1141.85553483615 521 1.59251042176055e-10 535 87 0.118133111837098 0.434473586560398 0.271899409978692 0.785699364921455 "no" NA NA NA NA NA 0.118687708068083 0.399785006104677 0.296878838014765 0.766559013008675 "no" 0.0646371228103185 0.364459593521298 0.17735058689446 0.859233017913944 "no" 0.105507841016204 0.352103585938559 0.299650004230898 0.764444137876394 "no" 0.0851478702556891 0.351563458225979 0.242197726365968 0.80862695671179 "no" 0.1533487510054 0.339953377222602 0.451087594005536 0.6519264186766 "no" 0.228507846909817 0.353899401497984 0.645685881192764 0.518482806041728 "no" 0.239650172912319 0.364273785919598 0.657884761889548 0.51061218297113 "no" 0.337015353941636 0.362942156169953 0.928564919264499 0.353114609259249 "no" NA NA NA NA NA -0.142550193876975 0.452611064972199 -0.314950748907854 0.752799048806809 "no" -0.178796240015508 0.459730831359819 -0.38891505163283 0.697338987421269 "no" -0.221942617035652 0.460379354246399 -0.48208638156451 0.629744583695757 "no" -0.221404378122779 0.579179245722301 -0.382272637975248 0.702259148038755 "no"
+"AGDR" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
+"HR" 768.456141857877 818.459845933627 -371.228070928939 742.456141857877 333 2.62888261448872e-10 346 72 0.112368399841429 0.526793925356224 0.213306179955367 0.831088153569532 "no" NA NA NA NA NA 0.11164543889717 0.593803894576803 0.188017357105309 0.850863044825241 "no" 0.121415944102037 0.557706781676539 0.217705697852633 0.827658423916931 "no" 0.115414609326645 0.569858403309597 0.202532082805739 0.839500779618622 "no" 0.112213383526748 0.519188312510869 0.21613233738654 0.828884593775827 "no" 0.210493458234632 0.503972480092199 0.417668556418245 0.676189464933743 "no" 0.275428865924547 0.514312937772411 0.535527780260559 0.59228495305055 "no" NA NA NA NA NA 0.385145331116451 0.520619460588355 0.739782816956547 0.45943178693481 "no" NA NA NA NA NA -0.182508346525939 0.505228061716246 -0.361239527958846 0.717920395287036 "no" -0.22036844899207 0.513754712627388 -0.428937085297157 0.66796901083435 "no" -0.27736617683739 0.516506926776123 -0.537003789220454 0.591264996648501 "no" -0.261218234913013 0.776178596326083 -0.336543981178362 0.736460691488969 "no"
+"RC" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
+"RE" 326.411661917969 359.306420372536 -152.205830958985 304.411661917969 136 1.90565822135145e-10 147 13 -4.79551045071361e-05 1.00002389454798 -4.79539586689696e-05 0.999961738276763 "no" NA NA NA NA NA 0.128878371535427 0.554219868350424 0.232540150390168 0.816118506243687 "no" 0.00492161658531514 0.499014822988023 0.0098626661144959 0.992130858553858 "no" 0.0651305567756825 0.474549367503352 0.137247168020348 0.890835428948668 "no" 0.0890325415585215 0.504880301566295 0.176343860678095 0.860023806067967 "no" -0.023292299954742 0.561775902245214 -0.0414619065389796 0.966927660902017 "no" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 0.0314938587304663 1.10152135635934 0.0285912375176794 0.977190600676998 "no" -0.0392658401765049 1.12781459045108 -0.0348158646899577 0.972226570107609 "no" -0.0536806388051385 1.11290602838387 -0.0482346554300655 0.96152923128104 "no" -0.0444020696124091 1.17586933785629 -0.0377610574431323 0.969878193871062 "no"
+"RI" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
+"RN" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
+"RP" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
b
diff -r 000000000000 -r f0dc3958e65d test-data/Simple_statistics_on_Community_metrics_cropped.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Simple_statistics_on_Community_metrics_cropped.txt Tue Jul 21 06:00:31 2020 -0400
b
b'@@ -0,0 +1,420 @@\n+\n+##################################################\n+Metrics and factors (and possible units/selections):\n+\n+ Metrics: species.richness \n+            aggregated per observation units.\n+\n+Analyses factor(s): \n+ *  year \n+ *  habitat \n+ *  site \n+ *  \n+\n+########################\n+Base statistics:\n+\n+      Min.    1st Qu.     Median       Mean    3rd Qu.       Max.         sd \n+  1.000000   1.000000   1.000000   1.106892   1.000000   2.000000   0.309200 \n+         N \n+711.000000 \n+\n+#########################################\n+Statistics per combination of factor levels:\n+\n+                                              Min. 1st Qu. Median     Mean\n+2007.Algueraie.Ilot Signal                       1    1.00    1.0 1.000000\n+2007.Algueraie.Radiales Signal laregnere         1    1.00    1.0 1.000000\n+2007.Corail vivant.Ilot Signal                   1    1.00    1.0 1.000000\n+2007.Corail vivant.NA                            1    1.00    1.0 1.000000\n+2007.Corail vivant.Recif Senez                   1    1.00    1.0 1.000000\n+2007.Detritique.Recif Laregnere                  1    1.00    1.0 1.000000\n+2007.Fond lagonaire.Ilot Signal                  1    1.00    1.0 1.000000\n+2007.Herbier.Ilot Signal                         1    1.00    1.0 1.000000\n+2008.Corail vivant.Abore                         1    1.00    1.0 1.000000\n+2008.Corail vivant.Laregnere                     2    2.00    2.0 2.000000\n+2008.Corail vivant.NA                            1    1.00    1.0 1.000000\n+2008.Detritique.Mbe Kouen                        1    1.00    1.0 1.000000\n+2008.Detritique.NA                               1    1.00    1.0 1.000000\n+2008.Detritique.Recif Laregnere                  1    1.00    1.0 1.000000\n+2008.Fond lagonaire.Abore                        1    1.00    1.0 1.000000\n+2008.Fond lagonaire.NA                           1    1.00    1.0 1.000000\n+2008.Herbier.Ilot Signal                         1    1.00    1.0 1.000000\n+2008.Herbier.Radiales Signal laregnere           1    1.00    1.0 1.000000\n+2009.Algueraie.NA                                1    1.00    1.0 1.000000\n+2009.Corail vivant.Abore                         1    1.00    1.0 1.037037\n+2009.Corail vivant.Mbe Kouen                     1    1.00    1.0 1.000000\n+2009.Corail vivant.NA                            1    1.00    1.0 1.125000\n+2009.Corail vivant.Recif Laregnere               1    1.00    1.0 1.000000\n+2009.Detritique.Mbe Kouen                        1    1.00    1.0 1.000000\n+2009.Detritique.NA                               1    1.00    1.0 1.000000\n+2009.Detritique.Recif Laregnere                  1    1.00    1.0 1.000000\n+2009.Fond lagonaire.Mbe Kouen                    1    1.00    1.0 1.000000\n+2009.Fond lagonaire.NA                           1    1.00    1.0 1.000000\n+2009.Fond lagonaire.Radiales Signal laregnere    1    1.00    1.0 1.000000\n+2009.Herbier.Radiales Signal laregnere           1    1.00    1.0 1.000000\n+2010.Corail vivant.Abore                         1    1.00    1.0 1.114286\n+2010.Detritique.Abore                            1    1.00    1.0 1.000000\n+2010.Detritique.Laregnere                        1    1.00    1.0 1.000000\n+2010.Detritique.Mbe Kouen                        1    1.00    1.0 1.000000\n+2010.Detritique.Recif Laregnere                  1    1.00    1.0 1.000000\n+2010.Fond lagonaire.Abore                        1    1.00    1.0 1.000000\n+2010.Fond lagonaire.Laregnere                    1    1.00    1.0 1.000000\n+2010.Fond lagonaire.Mbe Kouen                    1    1.00    1.0 1.000000\n+2010.Herbier.Radiales Signal laregnere           1    1.00    1.0 1.000000\n+2012.Corail vivant.Baie Port Bouquet             1    1.00    1.0 1.000000\n+2012.Corail vivant.Cap Goulvain                  1    1.00    1.0 1.000000\n+2012.Corail vivant.Deva                          1    1.00    1.0 1.000000\n+2012.Corail vivant.Grand recif Ngoe              1    1.00    1.0 1.000000\n+2012.Corail vivant.Ilot de sable                 1    1.00 '..b'       1.00    1 0.0000  2\n+2013.Fond lagonaire.Mbo                          1.00    1     NA  1\n+2013.Fond lagonaire.NA                           1.00    2 0.2422 49\n+2013.Fond lagonaire.Recif Bellona Sud            1.00    1     NA  1\n+2013.Fond lagonaire.Recif Cimenia                1.00    2 0.4082  6\n+2013.Fond lagonaire.Recif Ia                     1.00    1     NA  1\n+2013.Fond lagonaire.Recif Ie                     1.00    1     NA  1\n+2013.Fond lagonaire.Recif Mbe Kouen              1.00    1     NA  1\n+2013.Fond lagonaire.Recif Ndunekunie             1.00    1     NA  1\n+2013.Fond lagonaire.Recif Neokouie               1.00    1 0.0000  2\n+2013.Fond lagonaire.Recif Neokumbi               1.00    1 0.0000  2\n+2013.Fond lagonaire.Recif Nogumatiugi            1.00    1 0.0000  5\n+2013.Fond lagonaire.Recif Puakue                 1.00    1     NA  1\n+2013.Fond lagonaire.Recif Purembi                1.00    1     NA  1\n+2013.Fond lagonaire.Recif Senez                  1.00    1     NA  1\n+2013.Fond lagonaire.Recif Umbei                  1.00    1     NA  1\n+2013.Fond lagonaire.Seche Croissant              1.00    1     NA  1\n+2013.Herbier.Ilot Signal                         1.00    1     NA  1\n+2013.Herbier.Laregnere                           1.00    1     NA  1\n+2014.Corail vivant.Baie Xepenehe                 1.00    2 0.3631 14\n+2014.Corail vivant.Grand Astrolabe               1.00    1 0.0000  4\n+2014.Corail vivant.Jinek                         2.00    2 0.5270  9\n+2014.Corail vivant.Petit Astrolabe               1.50    2 0.4671 11\n+2014.Corail vivant.Petrie                        1.25    2 0.5000  4\n+2014.Corail vivant.Pointe Easo                   1.75    2 0.7071  2\n+2014.Corail vivant.Recif Jinek                   1.00    1 0.0000  2\n+2014.Corail vivant.Walpole                       1.00    1     NA  1\n+2014.Detritique.Baie Xepenehe                    1.00    1 0.0000  2\n+2014.Detritique.Grand Astrolabe                  1.00    1     NA  1\n+2014.Detritique.Hunter                           1.00    1 0.0000  2\n+2014.Detritique.Jinek                            1.50    2 0.5774  3\n+2014.Detritique.Petrie                           1.00    1 0.0000  2\n+2014.Fond lagonaire.Baie Xepenehe                1.00    1     NA  1\n+2014.Fond lagonaire.Grand Astrolabe              1.00    1     NA  1\n+2014.Fond lagonaire.Jinek                        1.75    2 0.7071  2\n+2015.Corail vivant.Grand Guilbert                2.00    2     NA  1\n+2015.Corail vivant.Huon                          1.00    2 0.3416 16\n+2015.Corail vivant.Merite                        1.00    1     NA  1\n+2015.Corail vivant.Pelotas                       2.00    2 0.5000  4\n+2015.Corail vivant.Petit Guilbert                1.00    1     NA  1\n+2015.Corail vivant.Portail                       1.50    2 0.5774  3\n+2015.Corail vivant.Surprise                      1.00    1 0.0000  7\n+2015.Detritique.Huon                             2.00    2 0.0000  2\n+2015.Detritique.Portail                          1.00    1 0.0000  2\n+2015.Fond lagonaire.Huon                         1.00    1     NA  1\n+2015.Fond lagonaire.Portail                      1.00    1     NA  1\n+2017.Corail vivant.Grand Astrolabe               2.00    2 0.5774  4\n+2017.Corail vivant.Petit Astrolabe               1.00    1 0.0000  2\n+2017.Corail vivant.Petrie                        2.00    2 0.5477  5\n+2017.Detritique.Grand Astrolabe                  2.00    2 0.5164 10\n+2017.Detritique.Petit Astrolabe                  2.00    2 0.4924 12\n+2017.Detritique.Petrie                           1.00    2 0.4082  6\n+2017.Fond lagonaire.Grand Astrolabe              1.00    1     NA  1\n+2017.Fond lagonaire.Petit Astrolabe              1.00    1 0.0000  2\n+2017.Fond lagonaire.Petrie                       1.00    1     NA  1\n+\n+######################################### \n+Fitted model:\n+\tspecies.richness ~ year + habitat + (1 | site)\n+\n+\n+Family :  poisson \n+Response :  species.richness\n\\ No newline at end of file\n'
b
diff -r 000000000000 -r f0dc3958e65d test-data/Unitobs.tabular
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/Unitobs.tabular Tue Jul 21 06:00:31 2020 -0400
b
b'@@ -0,0 +1,2862 @@\n+"AMP"\t"observation.unit"\t"type"\t"site"\t"station"\t"carac1"\t"carac2"\t"fraction"\t"jour"\t"mois"\t"year"\t"heure"\t"nebulosite"\t"dirVent"\t"forceVent"\t"etatMer"\t"courant"\t"maree"\t"lune"\t"latitude"\t"longitude"\t"statut_protection"\t"avant_apres"\t"biotop1"\t"biotop2"\t"habitat"\t"habitat2"\t"habitat3"\t"visibilite"\t"prof_min"\t"prof_max"\t"DimObs1"\t"DimObs2"\t"nb_observateur"\t"observateur"\n+"AMP"\t"AB080001"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.43877\t166.34874\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t6\t4.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080002"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.43975\t166.35523\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t6\t2.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080003"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t2\t-999\tNA\t"MM"\t"PQ"\t-22.4474\t166.36406\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t8\t2.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080004"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t2\t-999\tNA\t"MM"\t"PQ"\t-22.44773\t166.36715\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Herbier"\t"Recif barriere interne"\t"SG1"\t8\t2.7\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080005"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.45701\t166.37434\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\tNA\t7\t4.1\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080006"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\tNA\t3\t-999\tNA\t"MM"\t"PQ"\t-22.45893\t166.3782\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t10\t1.8\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080007"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.46091\t166.37847\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t7\t1.6\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080008"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.46931\t166.38774\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Corail vivant"\t"Recif barriere interne"\t"LC3"\t8\t2.3\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080009"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.47137\t166.39462\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA1"\t10\t3\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080010"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.47395\t166.39954\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA3"\t7\t3.7\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080011"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.47507\t166.39572\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Recif barriere interne"\t"SA3"\t10\t2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080012"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.48081\t166.41733\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Detritique"\t"Recif barriere interne"\t"SA5"\t9\t2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080013"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"MM"\t"PQ"\t-22.48161\t166.41947\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Detritique"\t"Recif barriere interne"\t"D7"\t8\t2.2\t-999\t-999\t-999\t-999\t"Delphine Mallet"\n+"AMP"\t"AB080014"\t"SVR"\t"Abore"\tNA\tNA\tNA\t1\t10\t7\t2008\tNA\tNA\t"0"\t0\t-999\tNA\t"PM"\t"PQ"\t-22.48274\t166.42438\t"RE"\t"AP"\t"Complexe de recif barriere externe"\t"platier recifal"\t"Detritique"\t"Recif barriere i'..b'\t0\t-999\tNA\t"MD"\t"LM"\t-22.3063035\t166.2917041\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"front recifal"\t"Detritique"\t"Frangeant ilot"\t"D1"\t6\t10.2\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100129"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2955173\t166.2967791\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Detritique"\t"Frangeant ilot"\t"D2"\t6.5\t5.3\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100130"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2947766\t166.2960761\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Detritique"\t"Frangeant ilot"\t"D1"\t7\t5.4\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100131"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2937402\t166.2949608\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Frangeant ilot"\t"SA3"\t7\t4.8\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100132"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t16\t4\t2010\tNA\tNA\tNA\t5\t-999\tNA\t"MD"\t"PC"\t-22.2929916\t166.2928995\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Frangeant ilot"\t"SA4"\t7.5\t3.8\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100133"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2930767\t166.2914348\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Detritique"\t"Frangeant ilot"\t"D2"\t6.5\t3.7\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100136"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.3052715\t166.2907546\t"RE"\t"AP"\t"Ile lagonaire"\t"lagon profond"\t"Detritique"\t"Frangeant ilot"\t"D3"\t6.5\t10.5\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100138"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.3022725\t166.2895628\t"RE"\t"AP"\t"Ile lagonaire"\t"lagon profond"\t"Detritique"\t"Frangeant ilot"\t"D2"\t6\t8\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100151"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2940228\t166.2910229\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Detritique"\t"Frangeant ilot"\t"D6"\t5\t3.5\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100152"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2951626\t166.2903255\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"terrasse peu profonde"\t"Fond lagonaire"\t"Frangeant ilot"\t"LC3"\t7\t5.4\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100153"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t27\t4\t2010\tNA\tNA\tNA\t2\t-999\tNA\t"MD"\t"LM"\t-22.2960763\t166.2901483\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Detritique"\t"Frangeant ilot"\t"D6"\t7\t3.5\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100154"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t27\t4\t2010\tNA\tNA\tNA\t2\t-999\tNA\t"MD"\t"LM"\t-22.2968722\t166.2895325\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Fond lagonaire"\t"Frangeant ilot"\t"D7"\t6\t4.6\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"SI100155"\t"SVR"\t"Ilot Signal"\t"SI"\tNA\tNA\t1\t26\t4\t2010\tNA\tNA\t"0"\t0\t-999\tNA\t"MD"\t"LM"\t-22.2981441\t166.2895349\t"RE"\t"AP"\t"Complexe de massif corallien de lagon"\t"platier recifal"\t"Detritique"\t"Frangeant ilot"\t"D6"\t7\t4.1\t-999\t-999\t-999\t-999\t"Drelon"\n+"AMP"\t"WA140001"\t"SVR"\t"Walpole"\tNA\t"Recif ilot"\tNA\t1\t1\t7\t2014\tNA\tNA\t"SW"\t3\t3\tNA\tNA\t"LM"\t-22.59854\t168.95012\t"HR"\t"AP"\t"Recif frangeant expose a l\\92ocean"\t"front recifal"\t"Corail vivant"\t"Frangeant oceanique"\t"D6"\t10\t10\t-999\t-999\t-999\t-999\t"William Roman"\n+"AMP"\t"WA140002"\t"SVR"\t"Walpole"\tNA\t"Recif ilot"\tNA\t1\t1\t7\t2014\tNA\tNA\t"SW"\t3\t3\tNA\tNA\t"LM"\t-22.60011\t168.94862\t"HR"\t"AP"\t"Recif frangeant expose a l\\92ocean"\t"front recifal"\t"Corail vivant"\t"Frangeant oceanique"\t"LC1"\t10\t15\t-999\t-999\t-999\t-999\t"William Roman"\n+"AMP"\t"WA140003"\t"SVR"\t"Walpole"\tNA\t"Recif ilot"\tNA\t1\t1\t7\t2014\tNA\tNA\t"SW"\t3\t4\tNA\tNA\t"LM"\t-22.60251\t168.94389\t"HR"\t"AP"\t"Recif frangeant expose a l\\92ocean"\t"front recifal"\t"Detritique"\t"Frangeant oceanique"\t"D1"\t10\t23.3\t-999\t-999\t-999\t-999\t"William Roman"\n'