Commit message:
"planemo upload for repository https://github.com/Marie59/Data_explo_tools commit 60627aba07951226c8fd6bb3115be4bd118edd4e" |
added:
LICENSE.md anonymization.xml funct_anomy.r functions.r graph_homogeneity_normality.r graph_lcbd.r graph_link_var.r graph_pres_abs_abund.r graph_stat_presence_abs.r macro.xml test-data/Data.tabular test-data/Missing_species.txt test-data/Reel_life_survey_fish_modif.tabular test-data/Reel_life_survey_fish_modif2.tabular test-data/SCBD.txt test-data/data_frenchbbs.tabular test-data/levene.txt test-data/species.txt test-data/test_bbs2.txt test-data/test_fish2.tabular test-data/test_value_fish2.txt |
b |
diff -r 000000000000 -r 726a387cfdc2 LICENSE.md --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE.md Fri Aug 13 18:17:11 2021 +0000 |
b |
b'@@ -0,0 +1,674 @@\n+ GNU GENERAL PUBLIC LICENSE\n+ Version 3, 29 June 2007\n+\n+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n+ Everyone is permitted to copy and distribute verbatim copies\n+ of this license document, but changing it is not allowed.\n+\n+ Preamble\n+\n+ The GNU General Public License is a free, copyleft license for\n+software and other kinds of works.\n+\n+ The licenses for most software and other practical works are designed\n+to take away your freedom to share and change the works. By contrast,\n+the GNU General Public License is intended to guarantee your freedom to\n+share and change all versions of a program--to make sure it remains free\n+software for all its users. We, the Free Software Foundation, use the\n+GNU General Public License for most of our software; it applies also to\n+any other work released this way by its authors. You can apply it to\n+your programs, too.\n+\n+ When we speak of free software, we are referring to freedom, not\n+price. Our General Public Licenses are designed to make sure that you\n+have the freedom to distribute copies of free software (and charge for\n+them if you wish), that you receive source code or can get it if you\n+want it, that you can change the software or use pieces of it in new\n+free programs, and that you know you can do these things.\n+\n+ To protect your rights, we need to prevent others from denying you\n+these rights or asking you to surrender the rights. Therefore, you have\n+certain responsibilities if you distribute copies of the software, or if\n+you modify it: responsibilities to respect the freedom of others.\n+\n+ For example, if you distribute copies of such a program, whether\n+gratis or for a fee, you must pass on to the recipients the same\n+freedoms that you received. You must make sure that they, too, receive\n+or can get the source code. And you must show them these terms so they\n+know their rights.\n+\n+ Developers that use the GNU GPL protect your rights with two steps:\n+(1) assert copyright on the software, and (2) offer you this License\n+giving you legal permission to copy, distribute and/or modify it.\n+\n+ For the developers\' and authors\' protection, the GPL clearly explains\n+that there is no warranty for this free software. For both users\' and\n+authors\' sake, the GPL requires that modified versions be marked as\n+changed, so that their problems will not be attributed erroneously to\n+authors of previous versions.\n+\n+ Some devices are designed to deny users access to install or run\n+modified versions of the software inside them, although the manufacturer\n+can do so. This is fundamentally incompatible with the aim of\n+protecting users\' freedom to change the software. The systematic\n+pattern of such abuse occurs in the area of products for individuals to\n+use, which is precisely where it is most unacceptable. Therefore, we\n+have designed this version of the GPL to prohibit the practice for those\n+products. If such problems arise substantially in other domains, we\n+stand ready to extend this provision to those domains in future versions\n+of the GPL, as needed to protect the freedom of users.\n+\n+ Finally, every program is threatened constantly by software patents.\n+States should not allow patents to restrict development and use of\n+software on general-purpose computers, but in those that do, we wish to\n+avoid the special danger that patents applied to a free program could\n+make it effectively proprietary. To prevent this, the GPL assures that\n+patents cannot be used to render the program non-free.\n+\n+ The precise terms and conditions for copying, distribution and\n+modification follow.\n+\n+ TERMS AND CONDITIONS\n+\n+ 0. Definitions.\n+\n+ "This License" refers to version 3 of the GNU General Public License.\n+\n+ "Copyright" also means copyright-like laws that apply to other kinds of\n+works, such as semiconductor masks.\n+\n+ "The Program" refers to '..b'HE PROGRAM\n+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n+\n+ 16. Limitation of Liability.\n+\n+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n+SUCH DAMAGES.\n+\n+ 17. Interpretation of Sections 15 and 16.\n+\n+ If the disclaimer of warranty and limitation of liability provided\n+above cannot be given local legal effect according to their terms,\n+reviewing courts shall apply local law that most closely approximates\n+an absolute waiver of all civil liability in connection with the\n+Program, unless a warranty or assumption of liability accompanies a\n+copy of the Program in return for a fee.\n+\n+ END OF TERMS AND CONDITIONS\n+\n+ How to Apply These Terms to Your New Programs\n+\n+ If you develop a new program, and you want it to be of the greatest\n+possible use to the public, the best way to achieve this is to make it\n+free software which everyone can redistribute and change under these terms.\n+\n+ To do so, attach the following notices to the program. It is safest\n+to attach them to the start of each source file to most effectively\n+state the exclusion of warranty; and each file should have at least\n+the "copyright" line and a pointer to where the full notice is found.\n+\n+ <one line to give the program\'s name and a brief idea of what it does.>\n+ Copyright (C) <year> <name of author>\n+\n+ This program is free software: you can redistribute it and/or modify\n+ it under the terms of the GNU General Public License as published by\n+ the Free Software Foundation, either version 3 of the License, or\n+ (at your option) any later version.\n+\n+ This program is distributed in the hope that it will be useful,\n+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n+ GNU General Public License for more details.\n+\n+ You should have received a copy of the GNU General Public License\n+ along with this program. If not, see <https://www.gnu.org/licenses/>.\n+\n+Also add information on how to contact you by electronic and paper mail.\n+\n+ If the program does terminal interaction, make it output a short\n+notice like this when it starts in an interactive mode:\n+\n+ <program> Copyright (C) <year> <name of author>\n+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.\n+ This is free software, and you are welcome to redistribute it\n+ under certain conditions; type `show c\' for details.\n+\n+The hypothetical commands `show w\' and `show c\' should show the appropriate\n+parts of the General Public License. Of course, your program\'s commands\n+might be different; for a GUI interface, you would use an "about box".\n+\n+ You should also get your employer (if you work as a programmer) or school,\n+if any, to sign a "copyright disclaimer" for the program, if necessary.\n+For more information on this, and how to apply and follow the GNU GPL, see\n+<https://www.gnu.org/licenses/>.\n+\n+ The GNU General Public License does not permit incorporating your program\n+into proprietary programs. If your program is a subroutine library, you\n+may consider it more useful to permit linking proprietary applications with\n+the library. If this is what you want to do, use the GNU Lesser General\n+Public License instead of this License. But first, please read\n+<https://www.gnu.org/licenses/why-not-lgpl.html>.\n' |
b |
diff -r 000000000000 -r 726a387cfdc2 anonymization.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anonymization.xml Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,71 @@ +<tool id="tool_anonymization" name="Spatial coordinates anonymization" version="@VERSION@" profile="20.01"> + <description> + without loss of the spatial relationships + </description> + <macros> + <import>macro.xml</import> + </macros> + <requirements> + <requirement type="package" version="0.8.1">r-tangles</requirement> + </requirements> + <command detect_errors="exit_code"><![CDATA[ + Rscript + '$__tool_directory__/funct_anomy.r' + '$input' + '$colnames' + '$latitude' + '$longitude' + '$output' + ]]> + </command> + <inputs> + <expand macro="explo_input"/> + <param name="latitude" label="Select column containing latitudes in decimal degrees" type="data_column" numerical="true" data_ref="input" multiple="false" use_header_names="true"/> + <param name="longitude" label="Select column containing longitudes in decimal degrees" type="data_column" numerical="true" data_ref="input" multiple="false" use_header_names="true"/> + </inputs> + <outputs> + <data name="output" from_work_dir="anonym_data.tabular" format="tabular"/> + </outputs> + <tests> + <test> + <param name="input" value="Reel_life_survey_fish_modif.tabular"/> + <param name="colnames" value="true"/> + <param name="latitude" value="9"/> + <param name="longitude" value="10"/> + <output name="output"> + <assert_contents> + <has_n_lines n="290"/> + </assert_contents> + </output> + </test> + </tests> + <help><![CDATA[ +===================================================== +Anonymization of the spatial coordinates of your data +===================================================== + + +**What it does** + +This tool anonymizes (random with 3 levels of abstraction) longitude and latitude decimal degrees coordinates of a tabular file without loss of the spatial relationships within the data. Handy to allow the sharing of sensitive data regarding threatened species or human activities for instance. + +Input description : + +A tabular file with observation data. Must at least contain two columns, latitudes and longitudes. + ++-------------+------------+ +| latitude | longitude | ++=============+============+ +| 2 | 4 | ++-------------+------------+ +| ... | ... | ++-------------+------------+ + +Output description : + +A tabular file with your original data file with its longitude and latitude replaced by anonymized longitudes and latitudes. + + ]]></help> + <citations> + </citations> +</tool> |
b |
diff -r 000000000000 -r 726a387cfdc2 funct_anomy.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/funct_anomy.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,39 @@ +#Rscript + +########################### +## Anonymization ## +########################### + +#####Packages : tangles + +#Load arguments + +args <- commandArgs(trailingOnly = TRUE) + +if (length(args) == 0) { + stop("This tool needs at least one argument") +}else{ + table <- args[1] + hr <- args[2] + latitude <- as.numeric(args[3]) + longitude <- as.numeric(args[4]) +} + +if (hr == "false") { + hr <- FALSE +}else{ + hr <- TRUE +} + +#####Import data +data <- read.table(table, sep = "\t", dec = ".", header = hr, fill = TRUE, encoding = "UTF-8") + +randomized_data <- tangles::tangles(data = as.matrix(data[, c(latitude, longitude)]), depth = 3, rasterdata = FALSE, raster_object = FALSE, saveTangles = FALSE, path = NULL) + +data[, c(latitude, longitude)] <- NULL + +tab_anon <- data.frame(longitude = randomized_data[[1]]$X, latitude = randomized_data[[1]]$Y) + +tab_anon <- cbind(data, tab_anon) + +write.table(tab_anon, "anonym_data.tabular", row.names = FALSE, quote = FALSE, sep = "\t", dec = ".", fileEncoding = "UTF-8") |
b |
diff -r 000000000000 -r 726a387cfdc2 functions.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/functions.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,22 @@ +#Rscript + +######################################################################################### +####################### Exploration data tools function ################################# +######################################################################################### +#### Based on Romain Lorrillière R script +#### Modified by Alan Amosse, Benjamin Yguel and Marie Jossé for integrating within Galaxy-E + +######################################### start of the function makeTableAnalyse +##Species are placed in separated columns and addition of zero on plots where at least one selected species is present +make_table_analyse <- function(data, var, spe, var2, var3) { + tab <- reshape(data + , v.names = var + , idvar = c(var2, var3) + , timevar = spe + , direction = "wide") + tab[is.na(tab)] <- 0 ###### remplace les na par des 0 / replace NAs by 0 + + colnames(tab) <- sub(paste0(var, "."), "", colnames(tab))### remplace le premier pattern "abond." par le second "" / replace the column names "abond." by "" + return(tab) +} +######################################### end of the function makeTableAnalyse |
b |
diff -r 000000000000 -r 726a387cfdc2 graph_homogeneity_normality.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graph_homogeneity_normality.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,130 @@ +#Rscript + +####################################### +## Homogeneity and normality ## +####################################### + +#####Packages : car +# ggplot2 +# ggpubr +# Cowplot + +#####Load arguments + +args <- commandArgs(trailingOnly = TRUE) + +if (length(args) == 0) { + stop("This tool needs at least one argument") +}else{ + table <- args[1] + hr <- args[2] + date <- as.numeric(args[3]) + spe <- as.numeric(args[4]) + var <- as.numeric(args[5]) +} + +if (hr == "false") { + hr <- FALSE +}else{ + hr <- TRUE +} + +#####Import data +data <- read.table(table, sep = "\t", dec = ".", header = hr, fill = TRUE, encoding = "UTF-8") +data <- na.omit(data) +coldate <- colnames(data)[date] +colspe <- colnames(data)[spe] +colvar <- colnames(data)[var] + +#####Your analysis + +####Homogeneity of the variance#### + +##Test of Levene## +testlevene <- function(data, col1, col2) { + data[, col1] <- as.numeric(data[, col1]) + data[, col2] <- as.factor(data[, col2]) + tb_levene <- car::leveneTest(y = data[, col1], group = data[, col2]) + + return(tb_levene) + } +levene <- capture.output(testlevene(data = data, col1 = colvar, col2 = colspe)) + +cat("\nwrite table with levene test. \n--> \"", paste(levene, "\"\n", sep = ""), file = "levene.txt", sep = "", append = TRUE) + +##Two boxplots to visualize it## + +homog_var <- function(data, col1, col2, col3, mult) { + data[, col1] <- as.factor(data[, col1]) + if (mult) { + for (spe in unique(data[, col2])) { + data_cut <- data[data[, col2] == spe, ] + graph_2 <- ggplot2::ggplot(data_cut, ggplot2::aes_string(x = col1, y = col3, color = col1)) + + ggplot2::geom_boxplot() + + ggplot2::theme(legend.position = "none", axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), panel.background = ggplot2::element_rect(fill = "#d9d4c5", colour = "#d9d4c5", linetype = "solid"), + panel.grid.major = ggplot2::element_line(linetype = "solid", colour = "white"), + panel.grid.minor = ggplot2::element_line(linetype = "solid", colour = "white")) + + ggplot2::ggsave(paste("Homogeneity_of_", spe, ".png"), graph_2, width = 16, height = 9, units = "cm") + } + }else{ + graph_1 <- ggplot2::ggplot(data, ggplot2::aes_string(x = col1, y = col3, color = col1)) + + ggplot2::geom_boxplot() + + ggplot2::theme(legend.position = "none", axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1)) + + #Put multiple panels + graph_2 <- graph_1 + ggplot2::facet_grid(rows = ggplot2::vars(data[, col2]), scales = "free") + + ggplot2::theme(panel.background = ggplot2::element_rect(fill = "#d9d4c5", colour = "#d9d4c5", linetype = "solid"), + panel.grid.major = ggplot2::element_line(linetype = "solid", colour = "white"), + panel.grid.minor = ggplot2::element_line(linetype = "solid", colour = "white")) + + ggplot2::ggsave("Homogeneity.png", graph_2, width = 16, height = 9, units = "cm") + } +} + +####Normality of the distribution#### +# Kolmogorov-Smirnov test + +ks <- capture.output(ks.test(x = data[, var], y = "pnorm", alternative = "two.sided")) + +cat("\nwrite table with Kolmogorov-Smirnov test. \n--> \"", paste(ks, "\"\n", sep = ""), file = "ks.txt", sep = "", append = TRUE) + +#Histogramm with distribution line +graph_hist <- function(data, var1) { + graph_hist <- ggplot2::ggplot(data) + + ggplot2::geom_histogram(ggplot2::aes_string(x = var1), binwidth = 2, color = "black", fill = "white") + + ggplot2::geom_density(ggplot2::aes_string(var1), alpha = 0.12, fill = "red") + + ggplot2::ggtitle("Distribution histogram") + +return(graph_hist) +} + +#Add the mean dashed line +add_mean <- function(graph, var1) { + graph_mean <- graph + ggplot2::geom_vline(xintercept = mean(data[, var1]), + color = "midnightblue", linetype = "dashed", size = 1) + +return(graph_mean) +} + +#Adding a QQplot +graph_qqplot <- function(data, var1) { + graph2 <- ggpubr::ggqqplot(data, var1, color = "midnightblue") + ggplot2::ggtitle("Q-Q plot") + +return(graph2) +} + +#On suppose que les données sont distribuées normalement lorsque les points suivent approximativement la ligne de référence à 45 degrés. + +graph_fin <- function(graph1, graph2) { + graph <- cowplot::plot_grid(graph1, graph2, ncol = 2, nrow = 1) + + ggplot2::ggsave("Normal_distribution.png", graph, width = 10, height = 7, units = "cm") +} + +mult <- ifelse(length(unique(data[, colspe])) == 2, FALSE, TRUE) +homog_var(data, col1 = coldate, col2 = colspe, col3 = colvar, mult = mult) + +graph_hist1 <- graph_hist(data, var1 = colvar) +graph_mean <- add_mean(graph = graph_hist1, var1 = colvar) +graph_fin(graph1 = graph_mean, graph2 = graph_qqplot(data, var1 = colvar)) |
b |
diff -r 000000000000 -r 726a387cfdc2 graph_lcbd.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graph_lcbd.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
b'@@ -0,0 +1,225 @@\n+#Rscript\n+\n+#########################\n+## Beta diversity ##\n+#########################\n+\n+#####Packages : ggplot2\n+# vegan\n+# adespatial\n+# dplyr\n+# tibble\n+# tdyr\n+\n+#####Load arguments\n+\n+args <- commandArgs(trailingOnly = TRUE)\n+\n+if (length(args) < 2) {\n+ stop("This tool needs at least 2 arguments")\n+}else{\n+ table <- args[1]\n+ hr <- args[2]\n+ abund <- as.numeric(args[3])\n+ loc <- as.numeric(args[4])\n+ spe <- as.numeric(args[5])\n+ date <- as.numeric(args[6])\n+ map <- as.logical(args[7])\n+ sepa <- as.logical(args[8])\n+ not <- as.logical(args[9])\n+ lat <- as.numeric(args[10])\n+ long <- as.numeric(args[11])\n+ var <- as.numeric(args[12])\n+ source(args[13])\n+}\n+\n+if (hr == "false") {\n+ hr <- FALSE\n+}else{\n+ hr <- TRUE\n+}\n+\n+#####Import data\n+data <- read.table(table, sep = "\\t", dec = ".", header = hr, fill = TRUE, encoding = "UTF-8")\n+colabund <- colnames(data)[abund]\n+colloc <- colnames(data)[loc]\n+if (map) {\n+ collat <- colnames(data)[lat]\n+ collong <- colnames(data)[long]\n+}\n+colspe <- colnames(data)[spe]\n+coldate <- colnames(data)[date]\n+data[, coldate] <- as.factor(data[, coldate])\n+\n+data <- data[grep("^$", data[, spe], invert = TRUE), ]\n+\n+if (sepa) {\n+colvar <- colnames(data)[var]\n+}\n+\n+# Data for species\n+data_num <- make_table_analyse(data, colabund, colspe, colloc, coldate)\n+nb_spe <- length(unique(data[, spe]))\n+nb_col <- ncol(data_num) - nb_spe + 1\n+\n+#Data with coordinates and environmental\n+if (map) {\n+ data_xy <- data_num[, c(collat, collong)]\n+ colnames(data_xy) <- c("latitude", "longitude")\n+ # Data for environment\n+ data_env <- data_num[, c(colloc, collat, collong)]\n+ colnames(data_env) <- c("site", "latitude", "longitude")\n+}\n+\n+# Data with only species and their abundance\n+data_spe <- data_num[, nb_col:ncol(data_num)]\n+rownames(data_spe) <- paste0(data_num[, colloc], " - ", data_num[, coldate])\n+\n+#####Your analysis\n+\n+# Computation beta.div {adespatial}\n+# Beta.div on Hellinger-transformed species data\n+data_beta <- adespatial::beta.div(data_spe, method = "hellinger", nperm = 9999)\n+\n+save(data_beta, file = "beta_diversity.Rdata")\n+cat("##############################################################################",\n+ "\\n########################### Beta Diversity Summary ###########################",\n+ "\\n##############################################################################",\n+ "\\n\\n### All data ###",\n+ "\\nBeta diversity: ", data_beta$beta[[2]],\n+ "\\nSum of Squares: ", data_beta$beta[[1]],\n+ "\\n\\n### Vector of Local Contributions to Beta Diversity (LCBD) for the sites each date ###",\n+ "\\n", capture.output(data_beta$LCBD),\n+ "\\n\\n### Vector of P-values associated with the LCBD indices ###",\n+ "\\n", capture.output(data_beta$p.LCBD),\n+ "\\n\\n### Vector of Corrected P-values for the LCBD indices, Holm correction ###",\n+ "\\n", capture.output(data_beta$p.adj),\n+ "\\n\\n### Vector of Species contributions to beta diversity (SCBD) ###",\n+ "\\n", capture.output(data_beta$SCBD), file = "LCBD.txt", fill = 1, append = TRUE)\n+\n+# Which species have a SCBD larger than the mean SCBD?\n+scbd <- capture.output(data_beta$SCBD[data_beta$SCBD >= mean(data_beta$SCBD)])\n+write(scbd, "SCBD.txt")\n+\n+##1st fonction\n+beta_div_ext <- function(data_beta, data_xy, data_env) {\n+ data_beta_ext <- data.frame(data_xy, data_env, LCBD = data_beta$LCBD * 100, p.LCBD = data_beta$p.LCBD, signif = data_beta$p.LCBD < 0.05)\n+\n+ graph_beta_ext <- ggplot2::ggplot(data = data_beta_ext, ggplot2::aes(x = latitude, y = longitude, size = LCBD, col = signif)) +\n+ ggplot2::geom_point() +\n+ ggplot2::scale_colour_manual(values = c("#57bce0", "#ce0b0b"), labels = c("Non significant", "Significant"), name = "Significance at 0.05") +\n+ ggplot2::xlab("Longitude") + ggplot2::ylab("Latitude")\n+\n+ ggplot2::ggsave("Beta_diversity_through_space.png", graph_beta_ext)\n+}\n+\n'..b'###\n+\n+####LCBD####\n+lcbd_site <- adespatial::beta.div(data_spe, "hellinger", nperm = 999)\n+\n+compute_lcbd <- function(data_beta, data_spe, data_num) {\n+\n+#############\n+ mat_lcbd_site <- data.frame(data_spe, LCBD = data_beta$LCBD * 100, p.LCBD = data_beta$p.LCBD, signif = data_beta$p.LCBD < 0.05, site = data_num[, colloc], date = data_num[, coldate])\n+\n+## Map spatio-temp\n+##################\n+ p1 <- ggplot2::qplot(date, site, size = LCBD, col = signif, data = mat_lcbd_site)\n+ p1 <- p1 + ggplot2::scale_colour_manual(values = c("#57bce0", "#ce0b0b"), labels = c("Non significant", "Significant"), name = "Significance at 0.05")\n+ p1 <- p1 + ggplot2::theme_bw() + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90)) + ggplot2::xlab("Date") + ggplot2::ylab("Site")\n+\n+ ggplot2::ggsave("LCBD_sites_time.png", p1)\n+\n+\n+## Par ann\xc3\xa9es\n+#############\n+ mean_time <- tapply(mat_lcbd_site$LCBD, mat_lcbd_site$date, mean)\n+ sd_time <- tapply(mat_lcbd_site$LCBD, mat_lcbd_site$date, sd)\n+ date <- unique(mat_lcbd_site$date)\n+\n+ data <- data.frame(date, mean_time, sd_time)\n+\n+ time <- ggplot2::ggplot() + ggplot2::geom_pointrange(ggplot2::aes(x = date, y = mean_time, ymin = mean_time - sd_time, ymax = mean_time + sd_time), data = data)\n+ time <- time + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90), axis.line.y = ggplot2::element_line(size = 0.5)) + ggplot2::ylab("mean LCBD")\n+\n+ ggplot2::ggsave("Mean_LCBD_through_time.png", time)\n+}\n+\n+## Choose another graph\n+#######################\n+compute_lcbd2 <- function(data_beta, data_spe, data_num) {\n+\n+#############\n+ mat_lcbd_site <- data.frame(data_spe, LCBD = data_beta$LCBD * 100, p.LCBD = data_beta$p.LCBD, signif = data_beta$p.LCBD < 0.05, site = data_num[, colloc], date = data_num[, coldate], variable = data_num[, colvar])\n+\n+ p1 <- ggplot2::qplot(date, variable, size = LCBD, col = signif, data = mat_lcbd_site)\n+ p1 <- p1 + ggplot2::scale_colour_manual(values = c("#57bce0", "#ce0b0b"), labels = c("Non significant", "Significant"), name = "Significance at 0.05")\n+ p1 <- p1 + ggplot2::theme_bw() + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90)) + ggplot2::xlab("Date") + ggplot2::ylab(colvar)\n+\n+ ggplot2::ggsave(paste0("LCBD_per_", colvar, "_through_time.png"), p1)\n+}\n+\n+####SCBD###\n+# Function to compute SCBD\n+library(dplyr)\n+make_scbd_uvc <- function(data_spe, z, data_beta) {\n+ # Computation using beta.div {adespatial} on\n+ # Hellinger-transformed species data\n+\n+ # Which species have a SCBD larger than the mean SCBD?\n+ spe_scbd <- data_beta$SCBD[data_beta$SCBD >= mean(data_beta$SCBD)] %>%\n+ as.data.frame() %>%\n+ tibble::rownames_to_column(var = "Taxon") %>%\n+ dplyr::mutate("Methode" = z)\n+\n+ return(spe_scbd)\n+}\n+\n+# Function to make a radar plot\n+\n+coord_radar <- function(theta = "x", start = 0, direction = 1) {\n+ theta <- match.arg(theta, c("x", "y"))\n+ r <- if (theta == "x") "y" else "x"\n+ ggplot2::ggproto("CordRadar", ggplot2::coord_polar(theta = theta, start = start,\n+ direction = sign(direction)),\n+ is_linear = function(coord) TRUE)\n+}\n+\n+# Make the radar plot\n+radar_plot <- function(scbd_uvc_tc) {\n+ uvc_rd_plot_data <- scbd_uvc_tc %>%\n+ rename(scbd_score = ".")\n+\n+ rad_uvc <- ggplot2::ggplot(uvc_rd_plot_data, ggplot2::aes(x = Taxon, y = scbd_score, group = Methode)) +\n+ ggplot2::geom_line() +\n+ ggplot2::geom_point(size = 3) +\n+ coord_radar() +\n+ ggplot2::theme_bw() +\n+ ggplot2::theme(axis.text.x = ggplot2::element_text(size = 10),\n+ legend.position = "bottom")\n+\n+ ggplot2::ggsave("SCBD_Species_Radar_plot.png", rad_uvc)\n+}\n+\n+## LCBD\n+\n+if (map) {\n+ #Beta diversity\n+ beta_div_ext(data_beta, data_xy, data_env)\n+}\n+\n+#Lcbd per places and time\n+compute_lcbd(data_beta, data_spe, data_num)\n+\n+#Lcbd of your choice\n+if (sepa) {\n+ compute_lcbd2(data_beta, data_spe, data_num)\n+}\n+\n+##SCBD\n+\n+scbd_uvc_tc <- make_scbd_uvc(data_spe, z = "TC", data_beta)\n+\n+radar_plot(scbd_uvc_tc)\n' |
b |
diff -r 000000000000 -r 726a387cfdc2 graph_link_var.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graph_link_var.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
b'@@ -0,0 +1,296 @@\n+#Rscript\r\n+\r\n+################################################\r\n+## Link between variables and themselves ##\r\n+################################################\r\n+\r\n+#####Packages : ggplot2\r\n+# Cowplot\r\n+# Car\r\n+# faraway\r\n+# dplyr\r\n+# GGally\r\n+# FactoMiner\r\n+# factoextra\r\n+# ggcorrplot\r\n+\r\n+#####Load arguments\r\n+\r\n+args <- commandArgs(trailingOnly = TRUE)\r\n+\r\n+if (length(args) == 0) {\r\n+ stop("This tool needs at least one argument")\r\n+}else{\r\n+ table <- args[1]\r\n+ hr <- args[2]\r\n+ colli <- as.logical(args[3])\r\n+ vif <- as.logical(args[4])\r\n+ pca <- as.logical(args[5])\r\n+ interr <- as.logical(args[6])\r\n+ auto <- as.logical(args[7])\r\n+ spe <- as.numeric(args[8])\r\n+ col <- as.numeric(strsplit(args[9], ",")[[1]])\r\n+ var <- as.numeric(args[10])\r\n+ var2 <- as.numeric(args[11])\r\n+ var4 <- as.numeric(args[12])\r\n+}\r\n+\r\n+if (hr == "false") {\r\n+ hr <- FALSE\r\n+}else{\r\n+ hr <- TRUE\r\n+}\r\n+\r\n+if (length(col) == 1) {\r\n+stop("Please select two or more numerical columns")\r\n+}\r\n+\r\n+#####Import data\r\n+data <- read.table(table, sep = "\\t", dec = ".", header = hr, fill = TRUE, encoding = "UTF-8")\r\n+if (vif | pca) {\r\n+data_active <- data[col]\r\n+#Define the active individuals and the active variables for the PCA\r\n+}\r\n+\r\n+if (colli | interr) {\r\n+colspe <- colnames(data)[spe]\r\n+}\r\n+\r\n+if (colli) {\r\n+data_num <- data[col]\r\n+data_num$species <- data[, spe]\r\n+data_num <- data_num[grep("^$", data_num$spe, invert = TRUE), ]\r\n+}\r\n+\r\n+if (interr | auto) {\r\n+colvar <- colnames(data)[var]\r\n+}\r\n+\r\n+if (interr) {\r\n+colvar2 <- colnames(data)[var2]\r\n+colvar4 <- colnames(data)[var4]\r\n+}\r\n+\r\n+#####Your analysis\r\n+\r\n+####Independence of the observations####\r\n+\r\n+acf_tb <- function(data, var) {\r\n+obj <- acf(data[, var], na.action = na.pass)\r\n+ return(obj)\r\n+}\r\n+\r\n+acf_df <- function(data, var) {\r\n+\r\n+tb <- data.frame(acf = acf_tb(data, var)$acf, lag = acf_tb(data, var)$lag)\r\n+\r\n+ return(tb) # Lag: intervalle temporel entre mesures, fr\xc3\xa9quence \xc3\xa0 laquelle on mesure l\'auto corr\xc3\xa9lation.\r\n+# ACF: ind\xc3\xa9pendance temporelle\r\n+}\r\n+\r\n+autocorr <- function(var1, var2) {\r\n+ cat("\\nACF\\n", var2$acf, file = "acf.txt", fill = 1, append = TRUE)\r\n+ graph <- ggplot2::ggplot() +\r\n+ ggplot2::geom_bar(ggplot2::aes(x = var2$lag, y = var2$acf), stat = "identity", position = "identity", fill = "midnightblue") +\r\n+ ggplot2::geom_hline(mapping = ggplot2::aes(yintercept = qnorm((1 + 0.95) / 2) / sqrt(var1$n.used)),\r\n+ linetype = "dashed") + # calcul interval de confiance \xc3\xa0 95% sans correction du bruit blanc.\r\n+ ggplot2::geom_hline(mapping = ggplot2::aes(yintercept = -qnorm((1 + 0.95) / 2) / sqrt(var1$n.used)), linetype = "dashed") + ggplot2::labs(title = "Autocorrelation") + ggplot2::xlab("lag") + ggplot2::ylab("acf")\r\n+ ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5))\r\n+\r\n+ ggplot2::ggsave("autocorrelation.png", graph)\r\n+}\r\n+\r\n+####Interractions####\r\n+\r\n+graph <- function(data, var1, var2, var3) {\r\n+ graph <- ggplot2::ggplot(data, ggplot2::aes_string(x = var1, y = var2, group = var3, color = var3)) +\r\n+ ggplot2::geom_point() +\r\n+ ggplot2::geom_smooth(method = lm, se = FALSE) +\r\n+ ggplot2::theme(plot.title = ggplot2::element_text(color = "black", size = 12, face = "bold"))\r\n+\r\n+return(graph)\r\n+}\r\n+\r\n+# Put multiple panels\r\n+interraction <- function(data, var1, var2, var3, var4) {\r\n+ cat("\\nSpecies\\n", spe, file = "Species.txt", fill = 1, append = TRUE)\r\n+ if (mult1) {\r\n+ for (spe in unique(data[, var3])) {\r\n+ data_cut <- data[data[, var3] == spe, ]\r\n+ mult_graph <- graph(data_cut, var1, var2, var3) + ggplot2::facet_grid(cols = ggplot2::vars(data_cut[, var4]), scales = "free") +\r\n+ cowplot::background_grid(major = "xy", minor = "none") +\r\n+ cowplot::panel_border() + ggplot2::ggtitle("Interactions")\r\n+\r\n+ ggplot2::ggsave(paste("interaction_of_", spe'..b'+}\r\n+\r\n+####PCA method####\r\n+\r\n+plot_pca <- function(data) {\r\n+ #Correlation circle\r\n+ graph_corr <- factoextra::fviz_pca_var(active_data(data), col.var = "cos2",\r\n+ gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),\r\n+ repel = TRUE #Avoid text overlap\r\n+ )\r\n+ ggplot2::ggsave("Pca_circle.png", graph_corr)\r\n+}\r\n+\r\n+plot_qual <- function(data) {\r\n+ #PCA results for variables\r\n+ var <- factoextra::get_pca_var(active_data(data))\r\n+\r\n+ #representation quality\r\n+ graph_quality <- ggcorrplot::ggcorrplot(var$cos2[!apply(var$cos2, 1, anyNA), ], method = "circle",\r\n+ ggtheme = ggplot2::theme_gray,\r\n+ colors = c("#00AFBB", "#E7B800", "#FC4E07"))\r\n+\r\n+ ggplot2::ggsave("Pca_quality.png", graph_quality)\r\n+}\r\n+\r\n+#### Variance inflation factor ####\r\n+\r\n+myvif <- function(mod) {\r\n+ v <- vcov(mod)\r\n+ assign <- attributes(model.matrix(mod))$assign\r\n+ if (names(coefficients(mod)[1]) == "(Intercept)") {\r\n+ v <- v[-1, -1]\r\n+ assign <- assign[-1]\r\n+ } else warning("No intercept: vifs may not be sensible.")\r\n+ terms <- labels(terms(mod))\r\n+ n_terms <- length(terms)\r\n+ if (n_terms < 2) stop("The model contains fewer than 2 terms")\r\n+ if (length(assign) > dim(v)[1]) {\r\n+ diag(tmp_cor) <- 0\r\n+ if (any(tmp_cor == 1.0)) {\r\n+ return("Sample size is too small, 100% collinearity is present")\r\n+ } else {\r\n+ return("Sample size is too small")\r\n+ }\r\n+ }\r\n+ r <- cov2cor(v)\r\n+ detr <- det(r)\r\n+ result <- matrix(0, n_terms, 3)\r\n+ rownames(result) <- terms\r\n+ colnames(result) <- c("GVIF", "Df", "GVIF^(1/2Df)")\r\n+ for (term in 1:n_terms) {\r\n+ subs <- which(assign == term)\r\n+ result[term, 1] <- det(as.matrix(r[subs, subs])) * det(as.matrix(r[-subs, -subs])) / detr\r\n+ result[term, 2] <- length(subs)\r\n+ }\r\n+ if (all(result[, 2] == 1)) {\r\n+ result <- data.frame(GVIF = result[, 1])\r\n+ } else {\r\n+ result[, 3] <- result[, 1] ^ (1 / (2 * result[, 2]))\r\n+ }\r\n+ invisible(result)\r\n+}\r\n+corvif1 <- function(dataz) {\r\n+ dataz <- as.data.frame(dataz)\r\n+ #correlation part\r\n+ tmp_cor <- cor(dataz, use = "complete.obs")\r\n+ return(tmp_cor)\r\n+}\r\n+corvif2 <- function(dataz) {\r\n+ dataz <- as.data.frame(dataz)\r\n+ #vif part\r\n+ form <- formula(paste("fooy ~ ", paste(strsplit(names(dataz), " "), collapse = " + ")))\r\n+ dataz <- data.frame(fooy = 1, dataz)\r\n+ lm_mod <- lm(form, dataz)\r\n+\r\n+ return(myvif(lm_mod))\r\n+}\r\n+\r\n+#Autocorrelation\r\n+if (auto) {\r\n+obj1 <- acf_tb(data, var = colvar)\r\n+obj2 <- acf_df(data, var = colvar)\r\n+autocorr(var1 = obj1, var2 = obj2)\r\n+}\r\n+\r\n+if (interr) {\r\n+#Interractions\r\n+mult1 <- ifelse(length(unique(data[, colspe])) <= 6, FALSE, TRUE)\r\n+interraction(data, var1 = colvar, var2 = colvar2, var3 = colspe, var4 = colvar4)\r\n+}\r\n+\r\n+#Collinearity\r\n+if (colli) {\r\n+mult2 <- ifelse(length(unique(data[, spe])) < 3, FALSE, TRUE)\r\n+coli(data = data_num, var = spe)\r\n+}\r\n+\r\n+#PCA\r\n+if (pca) {\r\n+active_data <- function(data) {\r\n+ #Calcul of PCA for the active data\r\n+ res_pca <- FactoMineR::PCA(data, graph = FALSE)\r\n+\r\n+return(res_pca)\r\n+}\r\n+\r\n+#eigenvalue\r\n+eig_val <- capture.output(factoextra::get_eigenvalue(active_data(data_active)))\r\n+\r\n+cat("\\nwrite table with eigenvalue. \\n--> \\"", paste(eig_val, "\\"\\n", sep = ""), file = "valeurs.txt", sep = "", append = TRUE)\r\n+\r\n+plot_pca(data_active)\r\n+plot_qual(data_active)\r\n+}\r\n+\r\n+#VIF\r\n+if (vif) {\r\n+#Compute 2 tables#\r\n+tb_corr <- as.data.frame(corvif1(dataz = data_active))\r\n+tb_corr <- cbind(x = rownames(tb_corr), tb_corr)\r\n+tb_vif <- corvif2(dataz = data_active)\r\n+\r\n+write.table(tb_corr, "corr.tabular", row.names = FALSE, quote = FALSE, sep = "\\t", dec = ".", fileEncoding = "UTF-8")\r\n+\r\n+if (all(is.na(tb_vif))) {\r\n+ tb_vif <- NULL\r\n+ cat("Vif couldn\'t be calculated, selected data isn\'t correlated")\r\n+}else{\r\n+write.table(tb_vif, "vif.tabular", row.names = FALSE, quote = FALSE, sep = "\\t", dec = ".", fileEncoding = "UTF-8")\r\n+}\r\n+}\r\n' |
b |
diff -r 000000000000 -r 726a387cfdc2 graph_pres_abs_abund.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graph_pres_abs_abund.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,195 @@ +#Rscript + +######################################################### +## Presence abscence and abundance in environment ## +######################################################### + +#####Packages : ggplot2 +# vegan + +#####Load arguments + +args <- commandArgs(trailingOnly = TRUE) + +if (length(args) < 5) { + stop("This tool needs at least 5 arguments") +}else{ + table <- args[1] + hr <- args[2] + abundance <- as.logical(args[3]) + presabs <- as.logical(args[4]) + rarefaction <- as.logical(args[5]) + lat <- as.numeric(args[6]) + long <- as.numeric(args[7]) + ind <- as.character(args[8]) + loc <- as.numeric(args[9]) + num <- as.character(args[10]) + spe <- as.numeric(args[11]) + abond <- as.numeric(args[12]) +} + +if (hr == "false") { + hr <- FALSE +}else{ + hr <- TRUE +} + +#####Import data +data <- read.table(table, sep = "\t", dec = ".", header = hr, fill = TRUE, encoding = "UTF-8") + +if (abundance) { +collat <- colnames(data)[lat] +collong <- colnames(data)[long] +} + +if (presabs) { +colloc <- colnames(data)[loc] +} + +if (presabs | rarefaction | abundance) { +colabond <- colnames(data)[abond] +colspe <- colnames(data)[spe] +data <- data[grep("^$", data[, colspe], invert = TRUE), ] +} + +#####Your analysis + +####The abundance in the environment#### + +##Representation of the environment## + +## Mapping +graph_map <- function(data, collong, collat, colabond, ind, colspe) { + cat("\nCoordinates range\n\nLatitude from ", min(data[, collat], na.rm = TRUE), " to ", max(data[, collat], na.rm = TRUE), "\nLongitude from ", min(data[, collong], na.rm = TRUE), " to ", max(data[, collong], na.rm = TRUE), file = "Data_abund.txt", fill = 1, append = TRUE) + if (mult0) { + mappy <- ggplot2::ggplot(data, ggplot2::aes_string(x = collong, y = collat, cex = colabond, color = colspe)) + + ggplot2::geom_point() + ggplot2::ggtitle(paste("Abundance of", ind, "in the environment")) + ggplot2::xlab("Longitude") + ggplot2::ylab("Latitude") + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.text = ggplot2::element_text(size = 8)) + ggplot2::guides(cex = ggplot2::guide_legend(reverse = TRUE)) + + }else{ + mappy <- ggplot2::ggplot(data, ggplot2::aes_string(x = collong, y = collat, cex = colabond, color = colabond)) + + ggplot2::geom_point() + ggplot2::ggtitle(paste("Abundance of", ind, "in the environment")) + ggplot2::xlab("Longitude") + ggplot2::ylab("Latitude") + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), legend.text = ggplot2::element_text(size = 8)) + ggplot2::guides(cex = ggplot2::guide_legend(reverse = TRUE)) + } + ggplot2::ggsave("mappy.png", mappy, width = 20, height = 9, units = "cm") +} + +####Presence absence abundance#### + +## Histogram +graph_hist <- function(data, col1, col2, col3) { + cat("\nLocations\n", unique(data[, col1]), file = "Locations.txt", fill = 1, append = TRUE) + if (mult1) { + for (loc in unique(data[, col1])) { + data_cut <- data[data[, col1] == loc, ] + data_cut <- data_cut[data_cut[, col3] > 0, ] + if (length(unique(data_cut[, col2])) <= 40) { + top <- nrow(data_cut) + var <- nchar(as.character(round(top * 0.1, digits = 0))) + step <- round(top * 0.1, digits = ifelse(var == 1, 1, -var + 1)) + graph <- ggplot2::ggplot(data_cut) + + ggplot2::geom_bar(ggplot2::aes_string(x = col1, fill = col2)) + + ggplot2::scale_y_continuous(breaks = seq(from = 0, to = top, by = step)) + + ggplot2::theme(plot.title = ggplot2::element_text(color = "black", size = 12, face = "bold")) + + ggplot2::ggtitle("Number of presence") + + ggplot2::ggsave(paste("number_in_", loc, ".png"), graph) + }else{ + cat(paste0("\n", loc, " had more than 40 species and plot isn't readable please select a higher taxon level or cut your data")) + } + } + }else{ + top <- nrow(data) + var <- nchar(as.character(round(top * 0.1, digits = 0))) + step <- round(top * 0.1, digits = ifelse(var == 1, 1, -var + 1)) + graph <- ggplot2::ggplot(data) + + ggplot2::geom_bar(ggplot2::aes_string(x = col1, fill = col2)) + + ggplot2::scale_y_continuous(breaks = seq(from = 0, to = top, by = step)) + + ggplot2::theme(plot.title = ggplot2::element_text(color = "black", size = 12, face = "bold")) + + ggplot2::ggtitle("Number of individuals") + + ggplot2::ggsave("number.png", graph) + } +} + +rare <- function(data, spe, abond, rare, num) { +# Put the data in form + new_data <- as.data.frame(data[, spe]) + colnames(new_data) <- c("Species") + new_data$total <- data[, abond] + + new_data$rarefaction <- as.integer(rare) + + end <- length(unique(new_data$Species)) + out <- vegan::rarecurve(new_data[, 2:3], step = 10, sample = rarefy_sample, label = FALSE) + names(out) <- paste(unique(new_data$Species), sep = "") + +# Coerce data into "long" form. + protox <- mapply(FUN = function(x, y) { + mydf <- as.data.frame(x) + colnames(mydf) <- "value" + mydf$species <- y + mydf$subsample <- attr(x, "Subsample") + mydf <- na.omit(mydf) + mydf + }, x = out, y = as.list(names(out)), SIMPLIFY = FALSE) + + xy <- do.call(rbind, protox) + rownames(xy) <- NULL # pretty + +# Plot. + + if (mult2) { + for (spe in unique(data[, spe])) { + xy_cut <- xy[xy$species == spe, ] + top <- max(xy_cut$subsample) + var <- nchar(as.character(round(top * 0.1, digits = 0))) + step <- round(top * 0.1, digits = ifelse(var == 1, 1, -var + 1)) + courbe <- ggplot2::ggplot(xy_cut, ggplot2::aes(x = subsample, y = value)) + + ggplot2::theme_gray() + + ggplot2::geom_line(size = 1) + + ggplot2::scale_x_continuous(breaks = seq(from = 0, to = top, by = step)) + + ggplot2::xlab("Abundance") + ggplot2::ylab("Value") + + ggplot2::ggtitle("rarefaction curve") + + ggplot2::ggsave(paste("rarefaction_of_", spe, ".png"), courbe) + } + }else{ + top <- max(xy$subsample) + var <- nchar(as.character(round(top * 0.1, digits = 0))) + step <- round(top * 0.1, digits = ifelse(var == 1, 1, -var + 1)) + courbe <- ggplot2::ggplot(xy, ggplot2::aes(x = subsample, y = value, color = species)) + + ggplot2::theme_gray() + + ggplot2::geom_line(size = 1) + + ggplot2::scale_x_continuous(breaks = seq(from = 0, to = top, by = step)) + + ggplot2::xlab("Subsample") + ggplot2::ylab("Value") + + ggplot2::ggtitle("rarefaction curves") + + ggplot2::ggsave("rarefaction.png", courbe) + } +} + +if (abundance) { +#Maps +mult0 <- ifelse(length(unique(data[, colspe])) > 10, FALSE, TRUE) +graph_map(data, collong = collong, collat = collat, colabond = colabond, ind = ind, colspe = colspe) +} + +if (presabs) { +#Presence absence count +mult1 <- ifelse(length(unique(data[, colloc])) <= 10, FALSE, TRUE) +graph_hist(data, col1 = colloc, col2 = colspe, col3 = colabond) +} + +if (rarefaction) { +#rarefaction + +#### rarefaction indice #### +rarefy_sample <- as.numeric(num) + +## Calcul de la rarefaction +rarefaction <- vegan::rarefy(data[, abond], rarefy_sample) + +write.table(rarefaction, "rare.tabular") + +mult2 <- ifelse(length(unique(data[, colspe])) <= 30, FALSE, TRUE) +rare(data, spe = colspe, abond = colabond, rare = rarefaction, num = rarefy_sample) +} |
b |
diff -r 000000000000 -r 726a387cfdc2 graph_stat_presence_abs.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graph_stat_presence_abs.r Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,105 @@ +#Rscript + +################################ +## Median and dispersion ## +################################ + +#####Packages : Cowplot +# ggplot2 + +#####Load arguments + +args <- commandArgs(trailingOnly = TRUE) + +if (length(args) == 0) { + stop("This tool needs at least one argument") +}else{ + table <- args[1] + hr <- args[2] + var <- as.numeric(args[3]) + spe <- as.numeric(args[4]) + loc <- as.numeric(args[5]) + time <- as.numeric(args[6]) + source(args[7]) +} + +if (hr == "false") { + hr <- FALSE +}else{ + hr <- TRUE +} + +#####Import data +data <- read.table(table, sep = "\t", dec = ".", header = hr, fill = TRUE, encoding = "UTF-8") +data <- na.omit(data) +colvar <- colnames(data)[var] +colspe <- colnames(data)[spe] +colloc <- colnames(data)[loc] +coltime <- colnames(data)[time] + +data <- data[grep("^$", data[, spe], invert = TRUE), ] + +#####Your analysis + +####Median and data dispersion#### + +#Median +graph_median <- function(data, var) { + graph_median <- ggplot2::ggplot(data, ggplot2::aes_string(y = var)) + + ggplot2::geom_boxplot(color = "darkblue") + + ggplot2::theme(legend.position = "none") + ggplot2::ggtitle("Median") + +return(graph_median) + +} + +#Dispersion +dispersion <- function(data, var, var2) { + graph_dispersion <- ggplot2::ggplot(data) + + ggplot2::geom_point(ggplot2::aes_string(x = var2, y = var, color = var2)) + + ggplot2::scale_fill_brewer(palette = "Set3") + + ggplot2::theme(legend.position = "none", axis.text.x = ggplot2::element_text(angle = 90, vjust = 0.5, hjust = 1), plot.title = ggplot2::element_text(color = "black", size = 12, face = "bold")) + ggplot2::ggtitle("Dispersion") + +return(graph_dispersion) + +} + +#The 2 graph +med_disp <- function(med, disp) { + graph <- cowplot::plot_grid(med, disp, ncol = 1, nrow = 2, vjust = -5, scales = "free") + + ggplot2::ggsave("Med_Disp.png", graph, width = 12, height = 20, units = "cm") +} + + +#### Zero problem in data #### + +#Put data in form + +data_num <- make_table_analyse(data, colvar, colspe, colloc, coltime) +nb_spe <- length(unique(data[, spe])) +nb_col <- ncol(data_num) - nb_spe + 1 +data_num <- data_num[, nb_col:ncol(data_num)] + +#Presence of zeros in the data +mat_corr <- function(data) { + cor(data) +} +p_mat <- function(data) { + ggcorrplot::cor_pmat(data) +} # compute a matrix of correlation p-values + +graph_corr <- function(data_num) { + graph <- ggcorrplot::ggcorrplot(mat_corr(data_num), method = "circle", p.mat = p_mat(data_num), #barring the no significant coefficient + ggtheme = ggplot2::theme_gray, colors = c("#00AFBB", "#E7B800", "#FC4E07")) + + ggplot2::ggsave("0_pb.png", graph) +} + +##Med and disp +med <- graph_median(data, var = colvar) +disp <- dispersion(data, var = colvar, var2 = colspe) +med_disp(med = med, disp = disp) + +##O problem +graph_corr(data_num) |
b |
diff -r 000000000000 -r 726a387cfdc2 macro.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macro.xml Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,65 @@ +<macros> + <token name="@VERSION@">0.0.0</token> + <xml name="Explo_requirements"> + <requirements> + <requirement type="package" version="3.3.3">r-ggplot2</requirement> + <yield /> + </requirements> + </xml> + <xml name="explo_input"> + <param name="input" type="data" format="tabular" label="Input table"/> + <param name="colnames" type="boolean" label="First line is a header line" checked="true"/> + </xml> + <xml name="explo_filter_colli"> + <filter> method['type'] == 'collinearity'</filter> + </xml> + <xml name="explo_filter_pca"> + <filter> method['type'] == 'pca'</filter> + </xml> + <xml name="explo_filter_vif"> + <filter> method['type'] == 'vif'</filter> + </xml> + <xml name="explo_filter_interr"> + <filter> method['type'] == 'interr'</filter> + </xml> + <xml name="explo_filter_autocorr"> + <filter> method['type'] == 'autocorr'</filter> + </xml> + <xml name="explo_filter_abund"> + <filter> method['type'] == 'abund'</filter> + </xml> + <xml name="explo_filter_pres_abs"> + <filter> method['type'] == 'pres_abs'</filter> + </xml> + <xml name="explo_filter_rare"> + <filter> method['type'] == 'rare'</filter> + </xml> + <xml name="explo_bibref"> + <citations> + <citation type="bibtex"> + @unpublished{ + title={ A protocol for data exploration to avoid common statistical problems }, + authors={Alain F. Zuur, Elena N. Ieno, Chris S. Elphick}, + url={https://besjournals.onlinelibrary.wiley.com/doi/full/10.1111/j.2041-210X.2009.00001.x} + } + </citation> + </citations> + </xml> + <xml name="book_bibref"> + <citations> + <citation type="bibtex"> + @unpublished{ + title={ Numerical Ecology with R }, + author={Daniel Borcard, François Gillet, Pierre Legendre}, + } + </citation> + </citations> + </xml> + <xml name="topic"> + <edam_topics> + <edam_topic>topic_0610</edam_topic> + <edam_topic>topic_3050</edam_topic> + </edam_topics> + </xml> +</macros> + |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/Data.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Data.tabular Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,2 @@ +"x" +"1" 29 |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/Missing_species.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Missing_species.txt Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,6 @@ + +There is not enough data on these species they appear too few times in the tabular-file + +Scorpaenidae +Plesiopidae +Serranidae |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/Reel_life_survey_fish_modif.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Reel_life_survey_fish_modif.tabular Fri Aug 13 18:17:11 2021 +0000 |
[ |
b'@@ -0,0 +1,290 @@\n+FID\tKey\tSurveyID\tCountry\tEcoregion\tRealm\tSiteCode\tSite\tSiteLat\tSiteLong\tSurveyDate\tDepth\tPhylum\tClass\tFamily\tTaxon\tBlock\tTotal\tDiver\tgeom\n+M2_FISH_DATA.1\t1\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tBlenniidae\tEcsenius mandibularis\t2\t2\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.2\t2\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tBlenniidae\tEcsenius stictus\t1\t5\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.3\t3\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tBlenniidae\tEcsenius stictus\t2\t8\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.4\t4\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tEviota guttata\t1\t6\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.5\t5\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tEviota guttata\t2\t9\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.6\t6\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tEviota hoesei\t1\t3\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.7\t7\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tEviota hoesei\t2\t19\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.8\t8\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tGobiodon histrio\t1\t1\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.9\t9\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tGobiodon histrio\t2\t3\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.10\t10\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tGobiodon sp. [3 GA]\t1\t12\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.11\t11\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tGobiidae\tGobiodon spp.\t2\t5\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.12\t12\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tScorpaenidae\tParascorpaena aurita\t2\t1\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.13\t13\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tTripterygiidae\tUcla xenogrammus\t1\t1\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.14\t14\t912347736\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6\tChordata\tActinopterygii\tTripterygiidae\tUcla xenogrammus\t2\t1\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.15\t15\t912347737\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T13:00:00Z\t6.1\tChordata\tActinopterygii\tPlesiopidae\tAssessor macneilli\t2\t20\tLVS\tPOINT (151.92 -23.18)\n+M2_FISH_DATA.16\t16\t912347737\tAustralia\tCentral and Southern Great Barrier Reef\tCentral Indo-Pacific\tAIMS12\tNorth Island Site 3\t-23.18\t151.92\t2017-02-13T1'..b'te Northern Atlantic\tAND8\tAlmeria puerto\t36.83\t-2.46\t2013-11-27T13:00:00Z\t1.8\tChordata\tActinopterygii\tBlenniidae\tParablennius pilicornis\t2\t5\tJASF\tPOINT (-2.46 36.83)\n+M2_FISH_DATA.272\t272\t912349134\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND8\tAlmeria puerto\t36.83\t-2.46\t2013-11-27T13:00:00Z\t1.8\tChordata\tActinopterygii\tScorpaenidae\tScorpaena porcus\t1\t1\tJASF\tPOINT (-2.46 36.83)\n+M2_FISH_DATA.273\t273\t912349134\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND8\tAlmeria puerto\t36.83\t-2.46\t2013-11-27T13:00:00Z\t1.8\tChordata\tActinopterygii\tScorpaenidae\tScorpaena porcus\t2\t1\tJASF\tPOINT (-2.46 36.83)\n+M2_FISH_DATA.274\t274\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tGobiidae\tGobius bucchichi\t1\t27\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.275\t275\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tGobiidae\tGobius bucchichi\t2\t27\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.276\t276\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tGobiesocidae\tLepadogaster candolii\t1\t1\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.277\t277\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tBlenniidae\tParablennius pilicornis\t1\t6\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.278\t278\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tBlenniidae\tParablennius pilicornis\t2\t14\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.279\t279\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tScorpaenidae\tScorpaena porcus\t1\t1\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.280\t280\t912344582\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2014-07-14T14:00:00Z\t3\tChordata\tActinopterygii\tTripterygiidae\tTripterygion delaisi\t1\t1\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.281\t281\t912349135\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2013-11-27T13:00:00Z\t2.4\tChordata\tActinopterygii\tGobiidae\tGobius bucchichi\t1\t3\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.282\t282\t912349135\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2013-11-27T13:00:00Z\t2.4\tChordata\tActinopterygii\tGobiidae\tGobius bucchichi\t2\t2\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.283\t283\t912349135\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2013-11-27T13:00:00Z\t2.4\tChordata\tActinopterygii\tBlenniidae\tParablennius pilicornis\t1\t4\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.284\t284\t912349135\tSpain\tAlboran Sea\tTemperate Northern Atlantic\tAND9\tCamping\t36.82\t-2.51\t2013-11-27T13:00:00Z\t2.4\tChordata\tActinopterygii\tBlenniidae\tParablennius pilicornis\t2\t6\tJASF\tPOINT (-2.51 36.82)\n+M2_FISH_DATA.285\t285\t912345928\tAntarctica\tAntarctic Peninsula\tSouthern Ocean\tANT4\tEnd Runway\t-67.57\t-68.13\t2016-01-05T13:00:00Z\t9\tChordata\tActinopterygii\tNototheniidae\tTrematomus hansoni\t1\t1\tSM\tPOINT (-68.13 -67.57)\n+M2_FISH_DATA.286\t286\t912346517\tAntarctica\tAntarctic Peninsula\tSouthern Ocean\tANT5\tWharf\t-67.57\t-68.13\t2016-01-06T13:00:00Z\t9\tChordata\tActinopterygii\tNototheniidae\tNotothenia coriiceps\t2\t1\tSM\tPOINT (-68.13 -67.57)\n+M2_FISH_DATA.287\t287\t912346517\tAntarctica\tAntarctic Peninsula\tSouthern Ocean\tANT5\tWharf\t-67.57\t-68.13\t2016-01-06T13:00:00Z\t9\tChordata\tActinopterygii\tNototheniidae\tTrematomus newnesi\t1\t1\tSM\tPOINT (-68.13 -67.57)\n+M2_FISH_DATA.288\t288\t912346518\tAntarctica\tAntarctic Peninsula\tSouthern Ocean\tANT7\tTrovall\t-67.6\t-68.21\t2016-02-11T13:00:00Z\t12\tChordata\tActinopterygii\tHarpagiferidae\tHarpagifer antarcticus\t1\t1\tSM\tPOINT (-68.21 -67.6)\n+M2_FISH_DATA.289\t289\t912346518\tAntarctica\tAntarctic Peninsula\tSouthern Ocean\tANT7\tTrovall\t-67.6\t-68.21\t2016-02-11T13:00:00Z\t12\tChordata\tActinopterygii\tNototheniidae\tNototheniid spp.\t2\t1\tSM\tPOINT (-68.21 -67.6)\n' |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/Reel_life_survey_fish_modif2.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Reel_life_survey_fish_modif2.tabular Fri Aug 13 18:17:11 2021 +0000 |
[ |
@@ -0,0 +1,30 @@ +FID Key SurveyID Country Ecoregion Realm SiteCode Site SiteLat SiteLong SurveyDate Depth Phylum Class Family Taxon Block Total Diver geom +M2_FISH_DATA.1 1 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Blenniidae Ecsenius mandibularis 2 2 LVS POINT (151.92 -23.18) +M2_FISH_DATA.2 2 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Blenniidae Ecsenius stictus 1 5 LVS POINT (151.92 -23.18) +M2_FISH_DATA.3 3 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Blenniidae Ecsenius stictus 2 8 LVS POINT (151.92 -23.18) +M2_FISH_DATA.4 4 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Eviota guttata 1 6 LVS POINT (151.92 -23.18) +M2_FISH_DATA.5 5 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Eviota guttata 2 9 LVS POINT (151.92 -23.18) +M2_FISH_DATA.6 6 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Eviota hoesei 1 3 LVS POINT (151.92 -23.18) +M2_FISH_DATA.7 7 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Eviota hoesei 2 19 LVS POINT (151.92 -23.18) +M2_FISH_DATA.8 8 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Gobiodon histrio 1 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.9 9 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Gobiodon histrio 2 3 LVS POINT (151.92 -23.18) +M2_FISH_DATA.10 10 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Gobiodon sp. [3 GA] 1 12 LVS POINT (151.92 -23.18) +M2_FISH_DATA.11 11 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Gobiidae Gobiodon spp. 2 5 LVS POINT (151.92 -23.18) +M2_FISH_DATA.12 12 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Scorpaenidae Parascorpaena aurita 2 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.13 13 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Tripterygiidae Ucla xenogrammus 1 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.14 14 912347736 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6 Chordata Actinopterygii Tripterygiidae Ucla xenogrammus 2 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.15 15 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Plesiopidae Assessor macneilli 2 20 LVS POINT (151.92 -23.18) +M2_FISH_DATA.16 16 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Blenniidae Ecsenius bicolor 1 4 LVS POINT (151.92 -23.18) +M2_FISH_DATA.17 17 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Blenniidae Ecsenius bicolor 2 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.18 18 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Blenniidae Ecsenius mandibularis 1 5 LVS POINT (151.92 -23.18) +M2_FISH_DATA.19 19 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Blenniidae Ecsenius mandibularis 2 6 LVS POINT (151.92 -23.18) +M2_FISH_DATA.20 20 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Blenniidae Ecsenius stictus 1 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.21 21 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Blenniidae Ecsenius stictus 2 3 LVS POINT (151.92 -23.18) +M2_FISH_DATA.22 22 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Tripterygiidae Enneapterygius similis 1 3 LVS POINT (151.92 -23.18) +M2_FISH_DATA.23 23 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Serranidae Epinephelus fasciatus 2 1 LVS POINT (151.92 -23.18) +M2_FISH_DATA.24 24 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Gobiidae Eviota guttata 1 6 LVS POINT (151.92 -23.18) +M2_FISH_DATA.25 25 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Gobiidae Eviota guttata 2 8 LVS POINT (151.92 -23.18) +M2_FISH_DATA.26 26 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Gobiidae Eviota hoesei 1 7 LVS POINT (151.92 -23.18) +M2_FISH_DATA.27 27 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Gobiidae Eviota hoesei 2 12 LVS POINT (151.92 -23.18) +M2_FISH_DATA.28 28 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Gobiidae Gobiodon sp. [3 GA] 2 16 LVS POINT (151.92 -23.18) +M2_FISH_DATA.29 29 912347737 Australia Central and Southern Great Barrier Reef Central Indo-Pacific AIMS12 North Island Site 3 -23.18 151.92 2017-02-13T13:00:00Z 6.1 Chordata Actinopterygii Gobiidae Gobiodon spp. 2 7 LVS POINT (151.92 -23.18) |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/SCBD.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/SCBD.txt Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,4 @@ + Blenniidae Gobiidae Scorpaenidae Tripterygiidae Plesiopidae + 0.13452280 0.12622864 0.05950360 0.15163110 0.07035376 + Apogonidae Nototheniidae + 0.06153987 0.14519360 |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/data_frenchbbs.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/data_frenchbbs.tabular Fri Aug 13 18:17:11 2021 +0000 |
b |
b'@@ -0,0 +1,851 @@\n+"carre"\t"annee"\t"espece"\t"abond"\r\n+"440072"\t2014\t"ALAARV"\t4\r\n+"440072"\t2014\t"PARCAE"\t5\r\n+"440168"\t2014\t"ALAARV"\t1\r\n+"440168"\t2014\t"PARCAE"\t10\r\n+"440168"\t2017\t"ALAARV"\t2\r\n+"440168"\t2017\t"PARCAE"\t12\r\n+"440168"\t2018\t"ALAARV"\t2\r\n+"440168"\t2018\t"PARCAE"\t20\r\n+"440211"\t2014\t"ALAARV"\t10\r\n+"440211"\t2014\t"PARCAE"\t5\r\n+"440211"\t2015\t"ALAARV"\t11\r\n+"440211"\t2015\t"PARCAE"\t6\r\n+"440211"\t2016\t"ALAARV"\t11\r\n+"440211"\t2016\t"PARCAE"\t2\r\n+"440211"\t2017\t"ALAARV"\t9\r\n+"440211"\t2017\t"PARCAE"\t2\r\n+"440211"\t2018\t"ALAARV"\t10\r\n+"440211"\t2018\t"PARCAE"\t8\r\n+"440235"\t2005\t"ALAARV"\t3\r\n+"440235"\t2005\t"PARCAE"\t15\r\n+"440235"\t2006\t"ALAARV"\t6\r\n+"440235"\t2006\t"PARCAE"\t12\r\n+"440235"\t2007\t"ALAARV"\t1\r\n+"440235"\t2007\t"PARCAE"\t10\r\n+"440235"\t2008\t"ALAARV"\t1\r\n+"440235"\t2008\t"PARCAE"\t12\r\n+"440235"\t2009\t"ALAARV"\t0\r\n+"440235"\t2009\t"PARCAE"\t13\r\n+"440278"\t2008\t"ALAARV"\t7\r\n+"440278"\t2008\t"PARCAE"\t7\r\n+"440278"\t2009\t"ALAARV"\t8\r\n+"440278"\t2009\t"PARCAE"\t14\r\n+"440278"\t2010\t"ALAARV"\t7\r\n+"440278"\t2010\t"PARCAE"\t5\r\n+"440278"\t2011\t"ALAARV"\t8\r\n+"440278"\t2011\t"PARCAE"\t7\r\n+"440278"\t2012\t"ALAARV"\t7\r\n+"440278"\t2012\t"PARCAE"\t8\r\n+"440278"\t2013\t"ALAARV"\t10\r\n+"440278"\t2013\t"PARCAE"\t8\r\n+"440278"\t2014\t"ALAARV"\t6\r\n+"440278"\t2014\t"PARCAE"\t7\r\n+"440278"\t2015\t"ALAARV"\t7\r\n+"440278"\t2015\t"PARCAE"\t7\r\n+"440278"\t2016\t"ALAARV"\t7\r\n+"440278"\t2016\t"PARCAE"\t7\r\n+"440278"\t2017\t"ALAARV"\t6\r\n+"440278"\t2017\t"PARCAE"\t2\r\n+"440278"\t2018\t"ALAARV"\t7\r\n+"440278"\t2018\t"PARCAE"\t7\r\n+"440310"\t2011\t"ALAARV"\t12\r\n+"440310"\t2011\t"PARCAE"\t5\r\n+"440310"\t2012\t"ALAARV"\t15\r\n+"440310"\t2012\t"PARCAE"\t13\r\n+"440310"\t2013\t"ALAARV"\t26\r\n+"440310"\t2013\t"PARCAE"\t12\r\n+"440310"\t2014\t"ALAARV"\t14\r\n+"440310"\t2014\t"PARCAE"\t8\r\n+"440310"\t2015\t"ALAARV"\t11\r\n+"440310"\t2015\t"PARCAE"\t8\r\n+"440310"\t2016\t"ALAARV"\t14\r\n+"440310"\t2016\t"PARCAE"\t10\r\n+"440310"\t2017\t"ALAARV"\t13\r\n+"440310"\t2017\t"PARCAE"\t12\r\n+"440310"\t2018\t"ALAARV"\t12\r\n+"440310"\t2018\t"PARCAE"\t11\r\n+"440398"\t2012\t"ALAARV"\t2\r\n+"440398"\t2012\t"PARCAE"\t2\r\n+"440398"\t2013\t"ALAARV"\t2\r\n+"440398"\t2013\t"PARCAE"\t2\r\n+"440398"\t2014\t"ALAARV"\t4\r\n+"440398"\t2014\t"PARCAE"\t6\r\n+"440411"\t2004\t"ALAARV"\t16\r\n+"440411"\t2004\t"PARCAE"\t5\r\n+"440411"\t2005\t"ALAARV"\t14\r\n+"440411"\t2005\t"PARCAE"\t8\r\n+"440411"\t2006\t"ALAARV"\t18\r\n+"440411"\t2006\t"PARCAE"\t10\r\n+"440411"\t2007\t"ALAARV"\t15\r\n+"440411"\t2007\t"PARCAE"\t7\r\n+"440411"\t2008\t"ALAARV"\t12\r\n+"440411"\t2008\t"PARCAE"\t9\r\n+"440411"\t2009\t"ALAARV"\t11\r\n+"440411"\t2009\t"PARCAE"\t5\r\n+"440411"\t2010\t"ALAARV"\t11\r\n+"440411"\t2010\t"PARCAE"\t2\r\n+"440411"\t2011\t"ALAARV"\t16\r\n+"440411"\t2011\t"PARCAE"\t5\r\n+"440411"\t2012\t"ALAARV"\t18\r\n+"440411"\t2012\t"PARCAE"\t2\r\n+"440411"\t2013\t"ALAARV"\t14\r\n+"440411"\t2013\t"PARCAE"\t11\r\n+"440411"\t2014\t"ALAARV"\t15\r\n+"440411"\t2014\t"PARCAE"\t9\r\n+"440411"\t2015\t"ALAARV"\t16\r\n+"440411"\t2015\t"PARCAE"\t3\r\n+"440411"\t2016\t"ALAARV"\t9\r\n+"440411"\t2016\t"PARCAE"\t3\r\n+"440411"\t2017\t"ALAARV"\t14\r\n+"440411"\t2017\t"PARCAE"\t13\r\n+"440411"\t2018\t"ALAARV"\t12\r\n+"440411"\t2018\t"PARCAE"\t6\r\n+"440430"\t2006\t"ALAARV"\t0\r\n+"440430"\t2006\t"PARCAE"\t5\r\n+"440430"\t2007\t"ALAARV"\t0\r\n+"440430"\t2007\t"PARCAE"\t4\r\n+"440430"\t2008\t"ALAARV"\t0\r\n+"440430"\t2008\t"PARCAE"\t7\r\n+"440430"\t2010\t"ALAARV"\t0\r\n+"440430"\t2010\t"PARCAE"\t3\r\n+"440430"\t2012\t"ALAARV"\t0\r\n+"440430"\t2012\t"PARCAE"\t2\r\n+"440430"\t2014\t"ALAARV"\t0\r\n+"440430"\t2014\t"PARCAE"\t3\r\n+"440456"\t2001\t"ALAARV"\t3\r\n+"440456"\t2001\t"PARCAE"\t10\r\n+"440456"\t2002\t"ALAARV"\t4\r\n+"440456"\t2002\t"PARCAE"\t11\r\n+"440456"\t2003\t"ALAARV"\t4\r\n+"440456"\t2003\t"PARCAE"\t14\r\n+"440456"\t2004\t"ALAARV"\t6\r\n+"440456"\t2004\t"PARCAE"\t16\r\n+"440456"\t2005\t"ALAARV"\t6\r\n+"440456"\t2005\t"PARCAE"\t13\r\n+"440456"\t2006\t"ALAARV"\t4\r\n+"440456"\t2006\t"PARCAE"\t9\r\n+"440456"\t2007\t"ALAARV"\t5\r\n+"440456"\t2007\t"PARCAE"\t11\r\n+"440456"\t2008\t"ALAARV"\t2\r\n+"440456"\t2008\t"PARCAE"\t8\r\n+"440456"\t2009\t"ALAARV"\t4\r\n+"440456"\t2009\t"PARCAE"\t10\r\n+"440456"\t2010\t"ALAARV"\t2\r\n+"440456"\t2010\t"PARCAE"\t15\r\n+"440456"\t2011\t"ALAARV"\t4\r\n+"440456"\t2011\t"PARCAE"\t14\r\n+"440456"\t2012\t"ALAARV"\t0\r\n+"440456"\t2012\t"PARCAE"\t11\r\n+"440456"\t2014\t"ALAARV"\t2\r\n+"440456"\t2014\t"PARCAE"\t12\r\n+"440462"\t2001\t"ALAARV"\t3\r\n+"440462"\t2001\t"PARCAE"\t3\r\n+"440462"\t2002\t"ALAARV"\t6\r\n+"440462"\t2002\t"PARCAE"\t5\r\n+"4'..b'07\t"PARCAE"\t6\r\n+"441242"\t2008\t"ALAARV"\t0\r\n+"441242"\t2008\t"PARCAE"\t8\r\n+"441242"\t2009\t"ALAARV"\t0\r\n+"441242"\t2009\t"PARCAE"\t7\r\n+"441242"\t2010\t"ALAARV"\t0\r\n+"441242"\t2010\t"PARCAE"\t3\r\n+"441242"\t2011\t"ALAARV"\t0\r\n+"441242"\t2011\t"PARCAE"\t6\r\n+"441242"\t2012\t"ALAARV"\t0\r\n+"441242"\t2012\t"PARCAE"\t9\r\n+"441242"\t2013\t"ALAARV"\t0\r\n+"441242"\t2013\t"PARCAE"\t9\r\n+"441242"\t2014\t"ALAARV"\t0\r\n+"441242"\t2014\t"PARCAE"\t10\r\n+"441242"\t2015\t"ALAARV"\t0\r\n+"441242"\t2015\t"PARCAE"\t9\r\n+"441242"\t2016\t"ALAARV"\t0\r\n+"441242"\t2016\t"PARCAE"\t5\r\n+"441242"\t2017\t"ALAARV"\t0\r\n+"441242"\t2017\t"PARCAE"\t5\r\n+"441242"\t2018\t"ALAARV"\t0\r\n+"441242"\t2018\t"PARCAE"\t4\r\n+"441259"\t2018\t"ALAARV"\t2\r\n+"441259"\t2018\t"PARCAE"\t14\r\n+"441265"\t2004\t"ALAARV"\t2\r\n+"441265"\t2004\t"PARCAE"\t6\r\n+"441265"\t2005\t"ALAARV"\t2\r\n+"441265"\t2005\t"PARCAE"\t3\r\n+"441265"\t2006\t"ALAARV"\t2\r\n+"441265"\t2006\t"PARCAE"\t0\r\n+"441265"\t2007\t"ALAARV"\t0\r\n+"441265"\t2007\t"PARCAE"\t4\r\n+"441265"\t2008\t"ALAARV"\t1\r\n+"441265"\t2008\t"PARCAE"\t7\r\n+"441265"\t2009\t"ALAARV"\t1\r\n+"441265"\t2009\t"PARCAE"\t4\r\n+"441265"\t2010\t"ALAARV"\t1\r\n+"441265"\t2010\t"PARCAE"\t2\r\n+"441265"\t2011\t"ALAARV"\t2\r\n+"441265"\t2011\t"PARCAE"\t13\r\n+"441265"\t2012\t"ALAARV"\t0\r\n+"441265"\t2012\t"PARCAE"\t5\r\n+"441265"\t2013\t"ALAARV"\t1\r\n+"441265"\t2013\t"PARCAE"\t4\r\n+"441307"\t2016\t"ALAARV"\t2\r\n+"441307"\t2016\t"PARCAE"\t10\r\n+"441307"\t2017\t"ALAARV"\t2\r\n+"441307"\t2017\t"PARCAE"\t3\r\n+"441307"\t2018\t"ALAARV"\t1\r\n+"441307"\t2018\t"PARCAE"\t6\r\n+"441311"\t2015\t"ALAARV"\t0\r\n+"441311"\t2015\t"PARCAE"\t12\r\n+"441311"\t2016\t"ALAARV"\t0\r\n+"441311"\t2016\t"PARCAE"\t6\r\n+"441311"\t2017\t"ALAARV"\t0\r\n+"441311"\t2017\t"PARCAE"\t6\r\n+"441311"\t2018\t"ALAARV"\t0\r\n+"441311"\t2018\t"PARCAE"\t15\r\n+"441340"\t2004\t"ALAARV"\t0\r\n+"441340"\t2004\t"PARCAE"\t10\r\n+"441340"\t2005\t"ALAARV"\t0\r\n+"441340"\t2005\t"PARCAE"\t10\r\n+"441340"\t2006\t"ALAARV"\t0\r\n+"441340"\t2006\t"PARCAE"\t8\r\n+"441340"\t2007\t"ALAARV"\t0\r\n+"441340"\t2007\t"PARCAE"\t7\r\n+"441340"\t2008\t"ALAARV"\t0\r\n+"441340"\t2008\t"PARCAE"\t6\r\n+"441340"\t2009\t"ALAARV"\t0\r\n+"441340"\t2009\t"PARCAE"\t7\r\n+"441340"\t2010\t"ALAARV"\t0\r\n+"441340"\t2010\t"PARCAE"\t2\r\n+"441340"\t2011\t"ALAARV"\t0\r\n+"441340"\t2011\t"PARCAE"\t6\r\n+"441340"\t2012\t"ALAARV"\t0\r\n+"441340"\t2012\t"PARCAE"\t6\r\n+"441340"\t2013\t"ALAARV"\t0\r\n+"441340"\t2013\t"PARCAE"\t7\r\n+"441340"\t2014\t"ALAARV"\t0\r\n+"441340"\t2014\t"PARCAE"\t6\r\n+"441340"\t2015\t"ALAARV"\t0\r\n+"441340"\t2015\t"PARCAE"\t5\r\n+"441376"\t2014\t"ALAARV"\t0\r\n+"441376"\t2014\t"PARCAE"\t15\r\n+"441376"\t2015\t"ALAARV"\t0\r\n+"441376"\t2015\t"PARCAE"\t10\r\n+"441376"\t2016\t"ALAARV"\t0\r\n+"441376"\t2016\t"PARCAE"\t7\r\n+"441376"\t2017\t"ALAARV"\t0\r\n+"441376"\t2017\t"PARCAE"\t13\r\n+"441376"\t2018\t"ALAARV"\t0\r\n+"441376"\t2018\t"PARCAE"\t18\r\n+"441558"\t2001\t"ALAARV"\t2\r\n+"441558"\t2001\t"PARCAE"\t6\r\n+"441558"\t2002\t"ALAARV"\t1\r\n+"441558"\t2002\t"PARCAE"\t0\r\n+"441558"\t2003\t"ALAARV"\t1\r\n+"441558"\t2003\t"PARCAE"\t0\r\n+"441558"\t2004\t"ALAARV"\t2\r\n+"441558"\t2004\t"PARCAE"\t3\r\n+"441558"\t2005\t"ALAARV"\t1\r\n+"441558"\t2005\t"PARCAE"\t1\r\n+"441558"\t2006\t"ALAARV"\t1\r\n+"441558"\t2006\t"PARCAE"\t3\r\n+"441558"\t2007\t"ALAARV"\t2\r\n+"441558"\t2007\t"PARCAE"\t4\r\n+"441558"\t2008\t"ALAARV"\t1\r\n+"441558"\t2008\t"PARCAE"\t4\r\n+"441558"\t2009\t"ALAARV"\t1\r\n+"441558"\t2009\t"PARCAE"\t5\r\n+"441558"\t2011\t"ALAARV"\t1\r\n+"441558"\t2011\t"PARCAE"\t0\r\n+"441558"\t2012\t"ALAARV"\t0\r\n+"441558"\t2012\t"PARCAE"\t1\r\n+"441594"\t2004\t"ALAARV"\t12\r\n+"441594"\t2004\t"PARCAE"\t3\r\n+"441594"\t2005\t"ALAARV"\t9\r\n+"441594"\t2005\t"PARCAE"\t3\r\n+"441594"\t2006\t"ALAARV"\t10\r\n+"441594"\t2006\t"PARCAE"\t1\r\n+"441594"\t2007\t"ALAARV"\t5\r\n+"441594"\t2007\t"PARCAE"\t3\r\n+"441594"\t2008\t"ALAARV"\t6\r\n+"441594"\t2008\t"PARCAE"\t6\r\n+"441594"\t2009\t"ALAARV"\t1\r\n+"441594"\t2009\t"PARCAE"\t5\r\n+"441640"\t2012\t"ALAARV"\t12\r\n+"441640"\t2012\t"PARCAE"\t4\r\n+"441680"\t2012\t"ALAARV"\t2\r\n+"441680"\t2012\t"PARCAE"\t4\r\n+"441680"\t2013\t"ALAARV"\t1\r\n+"441680"\t2013\t"PARCAE"\t7\r\n+"441680"\t2014\t"ALAARV"\t0\r\n+"441680"\t2014\t"PARCAE"\t7\r\n+"441680"\t2015\t"ALAARV"\t1\r\n+"441680"\t2015\t"PARCAE"\t5\r\n+"441680"\t2016\t"ALAARV"\t0\r\n+"441680"\t2016\t"PARCAE"\t2\r\n+"441680"\t2017\t"ALAARV"\t0\r\n+"441680"\t2017\t"PARCAE"\t5\r\n+"441680"\t2018\t"ALAARV"\t0\r\n+"441680"\t2018\t"PARCAE"\t7\r\n+"Ile de"\t2018\t"ALAARV"\t3\r\n+"Ile de"\t2018\t"PARCAE"\t7\r\n+"Le Mas"\t2018\t"ALAARV"\t0\r\n+"Le Mas"\t2018\t"PARCAE"\t7\n\\ No newline at end of file\n' |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/levene.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/levene.txt Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,8 @@ + +write table with levene test. +--> "Levene's Test for Homogeneity of Variance (center = median)" + Df F value Pr(>F) " +group 1 22.02 3.145e-06 ***" + 848 " +---" +Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1" |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/species.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/species.txt Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,6 @@ +Blenniidae +Gobiidae +Scorpaenidae +Tripterygiidae +Plesiopidae +Serranidae |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/test_bbs2.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_bbs2.txt Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,8 @@ + +write table with levene test. +--> "Levene's Test for Homogeneity of Variance (center = median)" + Df F value Pr(>F) " +group 1 22.02 3.145e-06 ***" + 848 " +---" +Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1" |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/test_fish2.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_fish2.tabular Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,2 @@ +"x" +"1" 6 |
b |
diff -r 000000000000 -r 726a387cfdc2 test-data/test_value_fish2.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test_value_fish2.txt Fri Aug 13 18:17:11 2021 +0000 |
b |
@@ -0,0 +1,10 @@ + +write table with eigenvalue. +--> " eigenvalue variance.percent cumulative.variance.percent" +Dim.1 2.849961e+00 5.699922e+01 56.99922" +Dim.2 1.229238e+00 2.458475e+01 81.58397" +Dim.3 7.482796e-01 1.496559e+01 96.54956" +Dim.4 1.725220e-01 3.450440e+00 100.00000" +Dim.5 1.948918e-14 3.897836e-13 100.00000" +Dim.6 9.545002e-34 1.909000e-32 100.00000" +Dim.7 2.137718e-35 4.275436e-34 100.00000" |