diff EstimEndem.R @ 0:f7a55ccf2a3e draft

planemo upload for repository https://github.com/galaxyecology/tools-ecology/tree/master/tools/Phylodiversity_workflow commit 0de557d919c26eb0b5ab61504bc597d551503ac3
author ecology
date Tue, 20 May 2025 09:52:29 +0000
parents
children f3a977826375
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EstimEndem.R	Tue May 20 09:52:29 2025 +0000
@@ -0,0 +1,75 @@
+#!/bin/Rscript
+# phyloregions
+
+args = commandArgs(trailingOnly=TRUE)
+#args = c("input/matrix_file", "input/tree_file.txt", "input/grid_aq_3_PF.shp")
+
+# library
+library(phyloregion)
+library(ape)
+library(Matrix)
+library(SparseArray)
+library(sf)
+library(sp)
+library(raster)
+library(dplyr)
+
+
+save_sf <- function(){
+  #st_write(phyloreg_sf[,-(3:5)], paste0(tempdir(), "/", "output.shp"), delete_layer = TRUE)
+  write_sf(phyloreg_sf, "output.shp")
+}
+
+
+if (length(args)<5){stop('Usage : sparseMatrix.csv tree.txt grid.shp nb_clust clust_method')
+}else{
+  # read enter files  
+  comm_tree <- read.tree(args[1])
+
+  comm_matrix <- readSparseCSV(args[2], sep = "\t")
+  comm_matrix <- as(comm_matrix,"dgCMatrix")
+  
+  grid <- read_sf(args[3])
+
+  nb_clust <- as.integer(args[4])
+
+  clust_method <- toString(args[5])
+  
+  # calculate phylogenetic Beta diversity - a phylogenetic distance matrix between grid cells
+  phylo_beta <- phylobeta(comm_matrix, comm_tree, index.family = "sorensen")
+  
+  #select the less distorting clustering method, best fitting between phylogenetic distances in phylobeta matrix
+  # and raw distances from branch lengths of the tree
+  select_linkage(phylo_beta[[1]])
+  
+  #select optimal number of clusters with selected method
+  optim <- optimal_phyloregion(phylo_beta[[3]], k = 30)
+  print(paste("the best number of cluster is :", optim$optimal$k))
+  #plot(optim$df$k, optim$df$ev, pch = 20)  # k - nbr of clusters VS explained variance given k
+  # k has to be selected by a user
+  
+  # pass the grid cell to spatial format 
+  grid_sp <- as_Spatial(grid)
+  #proj4string(grid_sp)
+  
+  # calculate phyloregions clusters
+  y <- phyloregion(phylo_beta[[3]], pol = grid_sp, k = nb_clust, method = clust_method)
+  #summary(y)
+  #phylo_nmds <- y$NMDS
+  
+  # take an shp spatial file for phyloregions and put it to sf format
+  phyloreg_sf <- y$pol
+  # print(st_crs(phyloreg_sf))
+  #plot(phyloreg_sf)
+  phyloreg_sf <- st_as_sf(phyloreg_sf, crs = st_crs(grid))
+  # print(st_crs(phyloreg_sf))
+
+  names(phyloreg_sf)[3:8] <- c("R_val", "G_val", "B_val", "r_code", "g_code", "b_code")
+
+
+  save_sf()
+}
+
+
+# sf_recup <- read_sf("output.shp")
+