From caac135b2278b9be5de00bfb7d14b07f24a26ddf Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Wed, 5 Apr 2023 21:14:35 -0400 Subject: [PATCH 01/39] fixed error reported by JK; changed m to km --- R/poccs_thinOccs.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/poccs_thinOccs.R b/R/poccs_thinOccs.R index 58751b16d..0e59b16c9 100644 --- a/R/poccs_thinOccs.R +++ b/R/poccs_thinOccs.R @@ -11,7 +11,7 @@ #' #' @param occs data frame of cleaned occurrences obtained from component occs: #' Obtain occurrence data -#' @param thinDist distance in meters to be used for thinning. Number must be +#' @param thinDist distance in kilometers to be used for thinning. Number must be #' positive. #' @param logger Stores all notification messages to be displayed in the Log #' Window of Wallace GUI. Insert the logger reactive list here for running From db563c7708cfc800a0909121f30159834b2c0cbd Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 7 Apr 2023 17:15:57 -0400 Subject: [PATCH 02/39] edited hyperlinks to open in new window; fixed broken links; corrected typos in citations --- inst/shiny/Rmd/gtext_envs.Rmd | 12 +++++------ inst/shiny/Rmd/gtext_espace.Rmd | 2 +- inst/shiny/Rmd/gtext_model.Rmd | 24 +++++++++++----------- inst/shiny/Rmd/gtext_occs.Rmd | 6 +++--- inst/shiny/Rmd/gtext_part.Rmd | 4 ++-- inst/shiny/Rmd/gtext_penvs.Rmd | 24 +++++++++++----------- inst/shiny/Rmd/gtext_poccs.Rmd | 2 +- inst/shiny/Rmd/gtext_rep.Rmd | 16 +++++++-------- inst/shiny/Rmd/gtext_vis.Rmd | 4 ++-- inst/shiny/Rmd/gtext_xfer.Rmd | 4 ++-- inst/shiny/Rmd/text_about.Rmd | 22 ++++++++++---------- inst/shiny/modules/envs_ecoclimate.md | 10 ++++----- inst/shiny/modules/envs_worldclim.md | 6 +++--- inst/shiny/modules/espace_nicheOv.md | 12 +++++------ inst/shiny/modules/espace_occDens.md | 8 ++++---- inst/shiny/modules/espace_pca.md | 12 +++++------ inst/shiny/modules/model_bioclim.md | 6 +++--- inst/shiny/modules/model_maxent.md | 26 ++++++++++++------------ inst/shiny/modules/occs_paleoDb.md | 4 ++-- inst/shiny/modules/occs_queryDb.md | 12 +++++------ inst/shiny/modules/part_nonSpat.md | 6 +++--- inst/shiny/modules/part_spat.md | 2 +- inst/shiny/modules/penvs_bgExtent.md | 20 +++++++++--------- inst/shiny/modules/penvs_drawBgExtent.md | 6 +++--- inst/shiny/modules/poccs_removeByID.md | 2 +- inst/shiny/modules/poccs_selectOccs.md | 2 +- inst/shiny/modules/poccs_thinOccs.md | 14 ++++++------- inst/shiny/modules/rep_markdown.md | 16 +++++++-------- inst/shiny/modules/rep_refPackages.md | 20 +++++++++--------- inst/shiny/modules/rep_rmms.md | 18 ++++++++-------- inst/shiny/modules/vis_bioclimPlot.md | 4 ++-- inst/shiny/modules/vis_mapPreds.md | 12 +++++------ inst/shiny/modules/vis_maxentEvalPlot.md | 6 +++--- inst/shiny/modules/vis_responsePlot.md | 2 +- inst/shiny/modules/xfer_area.md | 8 ++++---- inst/shiny/modules/xfer_mess.md | 12 +++++------ inst/shiny/modules/xfer_time.md | 12 +++++------ inst/shiny/modules/xfer_user.md | 6 +++--- 38 files changed, 192 insertions(+), 192 deletions(-) diff --git a/inst/shiny/Rmd/gtext_envs.Rmd b/inst/shiny/Rmd/gtext_envs.Rmd index e871d8327..95721ee56 100644 --- a/inst/shiny/Rmd/gtext_envs.Rmd +++ b/inst/shiny/Rmd/gtext_envs.Rmd @@ -15,14 +15,14 @@ We envision that future releases will offer other terrestrial climate datasets ( **REFERENCES** -Franklin, J. (2010). Mapping Species Distributions: Spatial Inference and Prediction. Data for species distribution models: the environmental data. In: *Mapping species distributions: spatial inference and prediction*. Cambridge: Cambridge University Press. https://doi.org/10.1017/CBO9780511810602 +Franklin, J. (2010). Mapping Species Distributions: Spatial Inference and Prediction. Data for species distribution models: the environmental data. In: *Mapping species distributions: spatial inference and prediction*. Cambridge: Cambridge University Press. DOI: 10.1017/CBO9780511810602 -Hijmans, R.J., Cameron, S.E., Parra, J.L., Jones, P.G., & Jarvis, A. (2005). Very high resolution interpolated climate surfaces for global land areas. *International Journal of Climatology*, 25(15), 1965-1978. https://doi.org/10.1002/joc.1276 +Hijmans, R.J., Cameron, S.E., Parra, J.L., Jones, P.G., & Jarvis, A. (2005). Very high resolution interpolated climate surfaces for global land areas. *International Journal of Climatology*, 25(15), 1965-1978. DOI: 10.1002/joc.1276 -Karger, D.N., Conrad, O., Böhner, J., Kawohl, T., Kreft, H., Soria-Auza, R.W., Zimmermann, N.E, Linder, H.P., & Kessler, M. (2016). Climatologies at high resolution for the earth's land surface areas (Version 1.1). World Data Center for Climate. http://dx.doi.org/doi:10.1594/WDCC/CHELSA_v1_1 +Karger, D.N., Conrad, O., Böhner, J., Kawohl, T., Kreft, H., Soria-Auza, R.W., Zimmermann, N.E, Linder, H.P., & Kessler, M. (2016). Climatologies at high resolution for the earth's land surface areas (Version 1.1). World Data Center for Climate. DOI: 10.1594/WDCC/CHELSA_v1_1 -Kriticos, D.J., Webber, B.L., Leriche, A., Ota, N., Macadam, I., Bathols, J., & Scott, J.K. (2012). CliMond: global high-resolution historical and future scenario climate surfaces for bioclimatic modelling. *Methods in Ecology and Evolution*, 3(1), 53-64. https://doi.org/10.1111/j.2041-210X.2011.00134.x +Kriticos, D.J., Webber, B.L., Leriche, A., Ota, N., Macadam, I., Bathols, J., & Scott, J.K. (2012). CliMond: global high-resolution historical and future scenario climate surfaces for bioclimatic modelling. *Methods in Ecology and Evolution*, 3(1), 53-64. DOI: 10.1111/j.2041-210X.2011.00134.x -Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). Environmental Data. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. https://doi.org/10.23943/princeton/9780691136868.003.0006 +Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). Environmental Data. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. DOI: 10.23943/princeton/9780691136868.003.0006 -Sbrocco, E.J., Barber, P.H. (2013). MARSPEC: ocean climate layers for marine spatial ecology. *Ecology*, 94(4), 979-979. https://doi.org/10.1890/12-1358.1 +Sbrocco, E.J., Barber, P.H. (2013). MARSPEC: ocean climate layers for marine spatial ecology. *Ecology*, 94(4), 979-979. DOI: 10.1890/12-1358.1 diff --git a/inst/shiny/Rmd/gtext_espace.Rmd b/inst/shiny/Rmd/gtext_espace.Rmd index 6b63bc189..3d7f774ee 100644 --- a/inst/shiny/Rmd/gtext_espace.Rmd +++ b/inst/shiny/Rmd/gtext_espace.Rmd @@ -14,7 +14,7 @@ The **Characterize Environmental Space** component performs analyses and visuali **REFERENCES** -Grinnell, J. (1917). "The niche-relationships of the California Thrasher". *The Auk*, 34(4), 427–433. DOI:10.2307/4072271 +Grinnell, J. (1917). "The niche-relationships of the California Thrasher". *The Auk*, 34(4), 427–433. DOI:10.2307/4072271 Chase, J.M., & Leibold, M.A. (2003). *Ecological Niches: Linking Classical and Contemporary Approaches*. University of Chicago Press. diff --git a/inst/shiny/Rmd/gtext_model.Rmd b/inst/shiny/Rmd/gtext_model.Rmd index e7262ce80..d2f78f3c2 100644 --- a/inst/shiny/Rmd/gtext_model.Rmd +++ b/inst/shiny/Rmd/gtext_model.Rmd @@ -44,28 +44,28 @@ Evaluation statistics are shown in the ‘Results’ tab, for the full model, th **REFERENCES** -Boyce, M.S., Vernier, P.R., Nielsen, S.E., & Schmiegelow, F.K.A. (2002). Evaluating resource selection functions. *Ecological Modelling*, 157(2-3), 281–300. https://doi.org/10.1016/S0304-3800(02)00200-4 +Boyce, M.S., Vernier, P.R., Nielsen, S.E., & Schmiegelow, F.K.A. (2002). Evaluating resource selection functions. *Ecological Modelling*, 157(2-3), 281–300. DOI: 10.1016/S0304-3800(02)00200-4 -Burnham, K.P., & Anderson, D.R. (2002). Model selection and multimodel inference : a practical information-theoretic approach. Springer, New York. https://doi.org/10.1007/b97636 +Burnham, K.P., & Anderson, D.R. (2002). Model selection and multimodel inference : a practical information-theoretic approach. Springer, New York. DOI: 10.1007/b97636 -Elith, J., Graham, C.H., Anderson, R.P., Dudík, M., Ferrier, S., Guisan, A., Hijmans, R.J., Huettmann, F., Leathwick, J.R., Leahmann, A., Li, J., Lohmann, L.G., Loiselle, B.A., Manion, G., Moritz, C., Nakamura, M., Nakazawa, Y., Overton, J.M., Peterson, A.T., Phillips, S.J., Richardson, K.S., Scachetti-Pereira, R., Schapire, R.E., Soberón, J., Williams, S., Wisz, M.S., & Zimmermann, N.E. (2006). Novel methods improve prediction of species' distributions from occurrence data. *Ecography*, 29(2), 129-151. https://doi.org/10.1111/j.2006.0906-7590.04596.x +Elith, J., Graham, C.H., Anderson, R.P., Dudík, M., Ferrier, S., Guisan, A., Hijmans, R.J., Huettmann, F., Leathwick, J.R., Leahmann, A., Li, J., Lohmann, L.G., Loiselle, B.A., Manion, G., Moritz, C., Nakamura, M., Nakazawa, Y., Overton, J.M., Peterson, A.T., Phillips, S.J., Richardson, K.S., Scachetti-Pereira, R., Schapire, R.E., Soberón, J., Williams, S., Wisz, M.S., & Zimmermann, N.E. (2006). Novel methods improve prediction of species' distributions from occurrence data. *Ecography*, 29(2), 129-151. DOI: 10.1111/j.2006.0906-7590.04596.x -Franklin, J. (2010). *Mapping Species Distributions: Spatial Inference and Prediction*. Statistical models - modern regression; Machine learning methods; Classification, similarity and other methods for presence-only data. Cambridge: Cambridge University Press. https://doi.org/10.1017/CBO9780511810602 +Franklin, J. (2010). *Mapping Species Distributions: Spatial Inference and Prediction*. Statistical models - modern regression; Machine learning methods; Classification, similarity and other methods for presence-only data. Cambridge: Cambridge University Press. DOI: 10.1017/CBO9780511810602 -Guisan, A., & Thuiller, W. (2005). Predicting species distribution: offering more than simple habitat models. *Ecology Letters*, 8, 993-1009. https://doi.org/10.1111/j.1461-0248.2005.00792.x +Guisan, A., & Thuiller, W. (2005). Predicting species distribution: offering more than simple habitat models. *Ecology Letters*, 8, 993-1009. DOI: 10.1111/j.1461-0248.2005.00792.x Hastie, T., Tibshirani, R., & Friedman, J.H. (2009). *The elements of Statistical Learning: Data Mining, Inference, and prediction*. Springer. The Elements of Statistical Learning -Hirzel, A.H., Lay, G.L., Helfer, H., Randin, C., & Guisan, A. (2006) Evaluating the ability of habitat suitability models to predict species presences. *Ecological Modelling*, 199(2), 142–152. https://doi.org/10.1016/j.ecolmodel.2006.05.017 +Hirzel, A.H., Lay, G.L., Helfer, H., Randin, C., & Guisan, A. (2006) Evaluating the ability of habitat suitability models to predict species presences. *Ecological Modelling*, 199(2), 142–152. DOI: 10.1016/j.ecolmodel.2006.05.017 -Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602-1608. https://doi.org/10.1111/2041-210X.13628 +Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602-1608. DOI: 10.1111/2041-210X.13628 -Lobo, J.M., Jiménez-Valverde, A., & Real, R. (2008). AUC: a misleading measure of the performance of predictive distribution models. *Global Ecology and Biogeography*, 17(2), 145-151. https://doi.org/10.1111/j.1466-8238.2007.00358.x +Lobo, J.M., Jiménez-Valverde, A., & Real, R. (2008). AUC: a misleading measure of the performance of predictive distribution models. *Global Ecology and Biogeography*, 17(2), 145-151. DOI: 10.1111/j.1466-8238.2007.00358.x -Peterson, A.T., Papeş, M., & Soberón, J. (2008). Rethinking receiver operating characteristic analysis applications in ecological niche modeling. *Ecological Modelling*, 213(1), 63-72. https://doi.org/10.1016/j.ecolmodel.2007.11.008 +Peterson, A.T., Papeş, M., & Soberón, J. (2008). Rethinking receiver operating characteristic analysis applications in ecological niche modeling. *Ecological Modelling*, 213(1), 63-72. DOI: 10.1016/j.ecolmodel.2007.11.008 -Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). Evaluating Model Performance and Significance. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. https://doi.org/10.23943/princeton/9780691136868.003.0005 +Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). Evaluating Model Performance and Significance. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. DOI: 10.23943/princeton/9780691136868.003.0005 -Roberts, D.R., Bahn, V., Ciuti, S., Boyce, M.S., Elith, J., Guillera-Arroita, G., Hauenstein, S., Lahoz-Monfort, J.J., Schröder, B., Thuiller, W., Warton, D.I., Wintle, B.A., Hartig, F., & Dormann, C.F. (2017). Cross-validation strategies for data with temporal, spatial, hierarchical, or phylogenetic structure. *Ecography*, 40(8), 913-929. https://doi.org/10.1111/ecog.02881 +Roberts, D.R., Bahn, V., Ciuti, S., Boyce, M.S., Elith, J., Guillera-Arroita, G., Hauenstein, S., Lahoz-Monfort, J.J., Schröder, B., Thuiller, W., Warton, D.I., Wintle, B.A., Hartig, F., & Dormann, C.F. (2017). Cross-validation strategies for data with temporal, spatial, hierarchical, or phylogenetic structure. *Ecography*, 40(8), 913-929. DOI: 10.1111/ecog.02881 -Warren, D.L., & Seifert, S.N. (2011). Ecological niche modeling in Maxent: the importance of model complexity and the performance of model selection criteria. *Ecological Applications*, 21(2), 335-342. https://doi.org/10.1890/10-1171.1 +Warren, D.L., & Seifert, S.N. (2011). Ecological niche modeling in Maxent: the importance of model complexity and the performance of model selection criteria. *Ecological Applications*, 21(2), 335-342. DOI: 10.1890/10-1171.1 diff --git a/inst/shiny/Rmd/gtext_occs.Rmd b/inst/shiny/Rmd/gtext_occs.Rmd index c247d1ba3..8f5fdab25 100644 --- a/inst/shiny/Rmd/gtext_occs.Rmd +++ b/inst/shiny/Rmd/gtext_occs.Rmd @@ -14,8 +14,8 @@ Unlike previous versions of *Wallace*, multiple species now can be uploaded in t **REFERENCES** -Anderson, R.P. (2012). Harnessing the world's biodiversity data: promise and peril in ecological niche modeling of species distributions. *Annals of the New York Academy of Sciences*, 1260(1), 66-80. https://doi.org/10.1111/j.1749-6632.2011.06440.x +Anderson, R.P. (2012). Harnessing the world's biodiversity data: promise and peril in ecological niche modeling of species distributions. *Annals of the New York Academy of Sciences*, 1260(1), 66-80. DOI: 10.1111/j.1749-6632.2011.06440.x -Franklin, J. (2010). Data for species distribution models: the biological data. In: *Mapping Species Distributions: Spatial Inference and Prediction*. Cambridge: Cambridge University Press. https://doi.org/10.1017/CBO9780511810602.007 +Franklin, J. (2010). Data for species distribution models: The biological data. In: *Mapping Species Distributions: Spatial Inference and Prediction* (Ecology, Biodiversity and Conservation, pp. 55-75). Cambridge: Cambridge University Press. DOI: 10.1017/CBO9780511810602.007 -Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). Species' Occurrence Data. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: Monographs in Population Biology, 49. Princeton University Press. https://doi.org/10.23943/princeton/9780691136868.003.0005 +Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). Species' Occurrence Data. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: Monographs in Population Biology, 49. Princeton University Press. DOI: 10.23943/princeton/9780691136868.003.0005 diff --git a/inst/shiny/Rmd/gtext_part.Rmd b/inst/shiny/Rmd/gtext_part.Rmd index a6b9e2af1..3e9376dbc 100644 --- a/inst/shiny/Rmd/gtext_part.Rmd +++ b/inst/shiny/Rmd/gtext_part.Rmd @@ -13,6 +13,6 @@ There are myriad particular ways to partition data for niche/distributional mode **REFERENCES** -Guisan A., & Zimmermann N.E. (2000). Predictive habitat distribution models in ecology. *Ecological Modelling*, 135(2-3), 147-186. https://doi.org/10.1016/S0304-3800(00)00354-9 +Guisan A., & Zimmermann N.E. (2000). Predictive habitat distribution models in ecology. *Ecological Modelling*, 135(2-3), 147-186. DOI: 10.1016/S0304-3800(00)00354-9 -Peterson, A.T., Soberón J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura M., & Araújo, M.B. (2011). Evaluating Model Performance and Significance. In: *Ecological Niches and Geographic Distributions*, Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. https://doi.org/10.23943/princeton/9780691136868.003.0009 +Peterson, A.T., Soberón J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura M., & Araújo, M.B. (2011). Evaluating Model Performance and Significance. In: *Ecological Niches and Geographic Distributions*, Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. DOI: 10.23943/princeton/9780691136868.003.0009 diff --git a/inst/shiny/Rmd/gtext_penvs.Rmd b/inst/shiny/Rmd/gtext_penvs.Rmd index 7a6fad8dd..c3494cc1e 100644 --- a/inst/shiny/Rmd/gtext_penvs.Rmd +++ b/inst/shiny/Rmd/gtext_penvs.Rmd @@ -19,28 +19,28 @@ After choosing a way to delimit the study region (**Step 1**), Wallace samples b **REFERENCES** -Acevedo, P., Jiménez‐Valverde, A., Lobo, J.M., & Real, R. (2012). Delimiting the geographical background in species distribution modelling. *Journal of Biogeography*, 39(8), 1383-1390. https://doi.org/10.1111/j.1365-2699.2012.02713.x +Acevedo, P., Jiménez‐Valverde, A., Lobo, J.M., & Real, R. (2012). Delimiting the geographical background in species distribution modelling. *Journal of Biogeography*, 39(8), 1383-1390. DOI: 10.1111/j.1365-2699.2012.02713.x Anderson, R.P. (2015). El modelado de nichos y distribuciones: no es simplemente "clic, clic, clic." [With English and French translations: Modeling niches and distributions: it's not just "click, click, click" and La modélisation de niche et de distributions: ce n'est pas juste "clic, clic, clic"]. *Biogeografía*, 8, 4-27. pdf -Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. *Annals of the New York Academy of Sciences*, 1297(1), 8-28. https://doi.org/10.1111/nyas.12264 +Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. *Annals of the New York Academy of Sciences*, 1297(1), 8-28. DOI: 10.1111/nyas.12264 -Anderson, R.P., & Raza A. (2010). The effect of the extent of the study region on GIS models of species geographic distributions and estimates of niche evolution: preliminary tests with montane rodents (genus *Nephelomys*) in Venezuela. *Journal of Biogeography*, 37(7), 1378-1393. https://doi.org/10.1111/j.1365-2699.2010.02290.x +Anderson, R.P., & Raza A. (2010). The effect of the extent of the study region on GIS models of species geographic distributions and estimates of niche evolution: preliminary tests with montane rodents (genus *Nephelomys*) in Venezuela. *Journal of Biogeography*, 37(7), 1378-1393. DOI: 10.1111/j.1365-2699.2010.02290.x -Barve, N., Barve, V., Jiménez-Valverde, A., Lira-Noriega, A., Maher, S.P., Peterson A.T., Soberón J., & Villalobos F. (2011). The crucial role of the accessible area in ecological niche modeling and species distribution modeling. *Ecological Modelling*, 222(11), 1810-1819. https://doi.org/10.1016/j.ecolmodel.2011.02.011 +Barve, N., Barve, V., Jiménez-Valverde, A., Lira-Noriega, A., Maher, S.P., Peterson A.T., Soberón J., & Villalobos F. (2011). The crucial role of the accessible area in ecological niche modeling and species distribution modeling. *Ecological Modelling*, 222(11), 1810-1819. DOI: 10.1016/j.ecolmodel.2011.02.011 -Franklin, J. (2010). Mapping Species Distributions: Spatial Inference and Prediction. Data for species distribution models: the biological data. In: *Mapping species distributions: spatial inference and prediction*. Cambridge: Cambridge University Press. +Franklin, J. (2010). Mapping Species Distributions: Spatial Inference and Prediction. Data for species distribution models: the biological data. In: *Mapping species distributions: spatial inference and prediction*. Cambridge: Cambridge University Press. DOI: 10.1017/CBO9780511810602 -Gerstner, B.E., Kass, J.M., Kays, R., Helgen, K.M., & Anderson, R.P. (2018). Revised distributional estimates for the recently discovered olinguito (*Bassaricyon neblina*), with comments on natural and taxonomic history. *Journal of Mammalogy*, 99(2), 321-332. https://doi.org/10.1093/jmammal/gyy012 +Gerstner, B.E., Kass, J.M., Kays, R., Helgen, K.M., & Anderson, R.P. (2018). Revised distributional estimates for the recently discovered olinguito (*Bassaricyon neblina*), with comments on natural and taxonomic history. *Journal of Mammalogy*, 99(2), 321-332. DOI: 10.1093/jmammal/gyy012 -Guevara, L., Gerstner, B.E., Kass, J.M., & Anderson, R.P. (2018). Toward ecologically realistic predictions of species distributions: A cross-time example from tropical montane cloud forests. *Global Change Biology*, 24(4), 1511-1522. https://doi.org/10.1111/gcb.13992 +Guevara, L., Gerstner, B.E., Kass, J.M., & Anderson, R.P. (2018). Toward ecologically realistic predictions of species distributions: A cross-time example from tropical montane cloud forests. *Global Change Biology*, 24(4), 1511-1522. DOI: 10.1111/gcb.13992 -Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: what it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. https://doi.org/10.1111/j.1600-0587.2013.07872.x +Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: what it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. DOI: 10.1111/j.1600-0587.2013.07872.x -Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura M., & Araújo M.B. (2011). Modeling Ecological Niches. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. https://doi.org/10.23943/princeton/9780691136868.003.0005 +Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura M., & Araújo M.B. (2011). Modeling Ecological Niches. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. DOI: 10.23943/princeton/9780691136868.003.0005 -Saupe, E.E., Barve, V., Myers, C.E., Soberón, J., Barve, N., Hensz, C.M., Peterson, A.T., Owens, H.L., & Lira-Noriega, A. (2012). Variation in niche and distribution model performance: the need for a priori assessment of key causal factors. *Ecological Modelling*, 237-238, 11-22. https://doi.org/10.1016/j.ecolmodel.2012.04.001 +Saupe, E.E., Barve, V., Myers, C.E., Soberón, J., Barve, N., Hensz, C.M., Peterson, A.T., Owens, H.L., & Lira-Noriega, A. (2012). Variation in niche and distribution model performance: the need for a priori assessment of key causal factors. *Ecological Modelling*, 237-238, 11-22. DOI: 10.1016/j.ecolmodel.2012.04.001 -Williams, J.W., & Jackson, S.T. (2007). Novel climates, no-analog communities, and ecological surprises. *Frontiers in Ecology and the Environment*, 5(9), 475-482. https://doi.org/10.1890/070037 +Williams, J.W., & Jackson, S.T. (2007). Novel climates, no-analog communities, and ecological surprises. *Frontiers in Ecology and the Environment*, 5(9), 475-482. DOI: 10.1890/070037 -VanDerWal, J., Shoo, L.P., Graham, C., & Williams, S.E. (2009). Selecting pseudo-absence data for presence-only distribution modeling: How far should you stray from what you know?. *Ecological Modelling*, 220(4), 589-594. https://doi.org/10.1016/j.ecolmodel.2008.11.010 +VanDerWal, J., Shoo, L.P., Graham, C., & Williams, S.E. (2009). Selecting pseudo-absence data for presence-only distribution modeling: How far should you stray from what you know?. *Ecological Modelling*, 220(4), 589-594. DOI: 10.1016/j.ecolmodel.2008.11.010 diff --git a/inst/shiny/Rmd/gtext_poccs.Rmd b/inst/shiny/Rmd/gtext_poccs.Rmd index a7ea2ef01..cb02683b6 100644 --- a/inst/shiny/Rmd/gtext_poccs.Rmd +++ b/inst/shiny/Rmd/gtext_poccs.Rmd @@ -11,4 +11,4 @@ Biodiversity data (especially from aggregated online databases) typically suffer **REFERENCES** -Costello, M. J., Michener, W. K., Gahegan, M., Zhang, Z. Q., & Bourne, P. E. (2013). Biodiversity data should be published, cited, and peer reviewed. *Trends in Ecology & Evolution*, 28(8), 454-461. https://doi.org/10.1016/j.tree.2013.05.002 +Costello, M. J., Michener, W. K., Gahegan, M., Zhang, Z. Q., & Bourne, P. E. (2013). Biodiversity data should be published, cited, and peer reviewed. *Trends in Ecology & Evolution*, 28(8), 454-461. DOI: 10.1016/j.tree.2013.05.002 diff --git a/inst/shiny/Rmd/gtext_rep.Rmd b/inst/shiny/Rmd/gtext_rep.Rmd index aeb5815e7..235cc69f4 100644 --- a/inst/shiny/Rmd/gtext_rep.Rmd +++ b/inst/shiny/Rmd/gtext_rep.Rmd @@ -11,19 +11,19 @@ Over the decade of the 2010s, scientific practice increasingly emphasized docume **REFERENCES** -Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. https://doi.org/10.1126/sciadv.aat4858 +Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. DOI: 10.1126/sciadv.aat4858 -Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. https://doi.org/10.1038/s41559-019-0972-5 +Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. DOI: 10.1038/s41559-019-0972-5 -Fitzpatrick, F.C., Lachmuth, S., & Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070. https://doi.org/10.1111/ecog.05700 +Fitzpatrick, F.C., Lachmuth, S., & Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070. DOI: 10.1111/ecog.05700 -Kass, J. M, Muscarella, R., Galante, P. J, Bohl, C. L., Pinilla-Buitrago, G. E., Boria, R. A., Soley-Guardia, M., Anderson, R. P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. https://doi.org/10.1111/2041-210X.13628 +Kass, J. M, Muscarella, R., Galante, P. J, Bohl, C. L., Pinilla-Buitrago, G. E., Boria, R. A., Soley-Guardia, M., Anderson, R. P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. DOI: 10.1111/2041-210X.13628 -Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., & Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. https://doi.org/10.1111/geb.12993 +Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., & Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. DOI: 10.1111/geb.12993 -Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. https://doi.org/10.1111/ecog.05618 +Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. DOI: 10.1111/ecog.05618 Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. -https://doi.org/10.1093/biosci/biz045 +DOI: 10.1093/biosci/biz045 -Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. https://doi.org/10.1111/ecog.04960 +Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. DOI: 10.1111/ecog.04960 diff --git a/inst/shiny/Rmd/gtext_vis.Rmd b/inst/shiny/Rmd/gtext_vis.Rmd index c913e7615..99ce71840 100644 --- a/inst/shiny/Rmd/gtext_vis.Rmd +++ b/inst/shiny/Rmd/gtext_vis.Rmd @@ -12,6 +12,6 @@ Niche/distributional models can be used to make transfers across geographic spac **REFERENCES** -Elith, J., & Graham, C.H. (2009). Do they? How do they? WHY do they differ? On finding reasons for differing performances of species distribution models. *Ecography*, 32, 66-77. https://doi.org/10.1111/j.1600-0587.2008.05505.x +Elith, J., & Graham, C.H. (2009). Do they? How do they? WHY do they differ? On finding reasons for differing performances of species distribution models. *Ecography*, 32, 66-77. DOI: 10.1111/j.1600-0587.2008.05505.x -Guisan, A., & Zimmermann, N.E. (2000). Predictive habitat distribution models in ecology. *Ecological Modelling*, 135(2-3), 147-186. https://doi.org/10.1016/S0304-3800(00)00354-9 +Guisan, A., & Zimmermann, N.E. (2000). Predictive habitat distribution models in ecology. *Ecological Modelling*, 135(2-3), 147-186. DOI: 10.1016/S0304-3800(00)00354-9 diff --git a/inst/shiny/Rmd/gtext_xfer.Rmd b/inst/shiny/Rmd/gtext_xfer.Rmd index 5dcd839f0..f85d0a656 100644 --- a/inst/shiny/Rmd/gtext_xfer.Rmd +++ b/inst/shiny/Rmd/gtext_xfer.Rmd @@ -13,6 +13,6 @@ Furthermore, at present *Wallace* provides some information characterizing the d **REFERENCES** -Fitzpatrick, M.C., & Hargrove, W.W. (2009). The projection of species distribution models and the problem of non-analog climate. *Biodiversity and Conservation*, 18, 2255. https://doi.org/10.1007/s10531-009-9584-8 +Fitzpatrick, M.C., & Hargrove, W.W. (2009). The projection of species distribution models and the problem of non-analog climate. *Biodiversity and Conservation*, 18, 2255. DOI: 10.1007/s10531-009-9584-8 -Williams, J.W., & Jackson, S.T. (2007). Novel climates, no-analog communities, and ecological surprises. *Frontiers in Ecology and the Environment*, 5(9), 475-482. https://doi.org/10.1890/070037 +Williams, J.W., & Jackson, S.T. (2007). Novel climates, no-analog communities, and ecological surprises. *Frontiers in Ecology and the Environment*, 5(9), 475-482. DOI: 10.1890/070037 diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index 4935471d8..f837b7c9c 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -15,9 +15,9 @@ The application is written in `R` with the web app development package `shiny`. Also, for more detail, please see our initial publication in *Methods in Ecology and Evolution* and our follow-up in *Ecography*. -Kass J. M., Vilela B., Aiello-Lammens M. E., Muscarella R., Merow C., Anderson R. P. (2018). *Wallace*: A flexible platform for reproducible modeling of species niches and distributions built for community expansion. *Methods Ecol Evol*. 9: 1151-1156. DOI: 10.1111/2041-210X.12945 +Kass J. M., Vilela B., Aiello-Lammens M. E., Muscarella R., Merow C., Anderson R. P. (2018). *Wallace*: A flexible platform for reproducible modeling of species niches and distributions built for community expansion. *Methods in Ecology and Evolultion*, 9(4): 1151-1156. DOI: 10.1111/2041-210X.12945 -Kass, J.M., Pinilla-Buitrago, G.E, Paz, A., Johnson, B.A., Grisales-Betancur, V., Meenan, S.I., Attali, D., Broennimann, O., Galante, P.J., Maitner, B.S., Owens, H.L., Varela, S., Aiello-Lammens, M.E., Merow, C., Blair, M.E., Anderson R.P. (2022). *wallace* 2: a shiny app for modeling species niches and distributions redesigned to facilitate expansion via module contributions. *Ecography*, in prep. DOI: 10.1111/ecog.06547. +Kass, J.M., Pinilla-Buitrago, G.E, Paz, A., Johnson, B.A., Grisales-Betancur, V., Meenan, S.I., Attali, D., Broennimann, O., Galante, P.J., Maitner, B.S., Owens, H.L., Varela, S., Aiello-Lammens, M.E., Merow, C., Blair, M.E., Anderson R.P. (2022). *wallace* 2: a shiny app for modeling species niches and distributions redesigned to facilitate expansion via module contributions. *Ecography*, 2023(3): e06547. DOI: 10.1111/ecog.06547. ### **Who is *Wallace* for?** @@ -73,7 +73,7 @@ Please email us wit If you use Wallace in your research, please cite: -Kass, J.M., Pinilla-Buitrago, G.E, Paz, A., Johnson, B.A., Grisales-Betancur, V., Meenan, S.I., Attali, D., Broennimann, O., Galante, P.J., Maitner, B.S., Owens, H.L., Varela, S., Aiello-Lammens, M.E., Merow, C., Blair, M.E., Anderson R.P. (2022). *wallace* 2: a shiny app for modeling species niches and distributions redesigned to facilitate expansion via module contributions. *Ecography*, e06547. DOI: 10.1111/ecog.06547. +Kass, J.M., Pinilla-Buitrago, G.E, Paz, A., Johnson, B.A., Grisales-Betancur, V., Meenan, S.I., Attali, D., Broennimann, O., Galante, P.J., Maitner, B.S., Owens, H.L., Varela, S., Aiello-Lammens, M.E., Merow, C., Blair, M.E., Anderson R.P. (2022). *wallace* 2: a shiny app for modeling species niches and distributions redesigned to facilitate expansion via module contributions. *Ecography*, 2023(3): e06547. DOI: 10.1111/ecog.06547 *** @@ -93,22 +93,22 @@ Mahmoud Shahin designed the WallaceEcoMod logo with inspiration from “Wallace #### **References** -1. Anderson, R. P. (2012). Harnessing the world's biodiversity data: promise and peril in ecological niche modeling of species distributions. *Annals of the New York Academy of Sciences*. 1260: 66-80. +1. Anderson, R. P. (2012). Harnessing the world's biodiversity data: promise and peril in ecological niche modeling of species distributions. *Annals of the New York Academy of Sciences*, 1260: 66-80. -2. Anderson, R. P. (2015). El modelado de nichos y distribuciones: no es simplemente "clic, clic, clic." [With English and French translations: Modeling niches and distributions: it's not just "click, click, click" and La modélisation de niche et de distributions: ce n'est pas juste "clic, clic, clic"]. *Biogeografía*. 8: 4-27. +2. Anderson, R. P. (2015). El modelado de nichos y distribuciones: no es simplemente "clic, clic, clic." [With English and French translations: Modeling niches and distributions: it's not just "click, click, click" and La modélisation de niche et de distributions: ce n'est pas juste "clic, clic, clic"]. *Biogeografía*, 8: 4-27. -3. Elith J. & Leathwick J.R. (2009). Species distribution models: ecological explanation and prediction across space and time. *Annual Review of Ecology, Evolution, and Systematics*. 40: 677-697. +3. Elith J. & Leathwick J.R. (2009). Species distribution models: ecological explanation and prediction across space and time. *Annual Review of Ecology, Evolution, and Systematics*, 40: 677-697. -4. Ficetola G.F., Thuiller W. & Miaud C. (2007) Prediction and validation of the potential global distribution of a problematic alien invasive species ― the American bullfrog. *Diversity and Distributions*. 13: 476-485. +4. Ficetola G.F., Thuiller W. & Miaud C. (2007) Prediction and validation of the potential global distribution of a problematic alien invasive species ― the American bullfrog. *Diversity and Distributions*, 13: 476-485. 5. Franklin J. (2010a). Mapping species distributions: spatial inference and prediction. Cambridge: Cambridge University Press. -6. Franklin J. (2010b) Moving beyond static species distribution models in support of conservation biogeography. *Diversity and Distributions*. 16: 321-330. +6. Franklin J. (2010b) Moving beyond static species distribution models in support of conservation biogeography. *Diversity and Distributions*, 16: 321-330. -7. González, C., Wang, O., Strutz, S. E., González-Salazar, C., Sánchez-Cordero, V., & Sarkar, S. 2010. Climate change and risk of leishmaniasis in North America: predictions from ecological niche models of vector and reservoir species. *PLoS Neglected Tropical Diseases*. 4: e585. +7. González, C., Wang, O., Strutz, S. E., González-Salazar, C., Sánchez-Cordero, V., & Sarkar, S. 2010. Climate change and risk of leishmaniasis in North America: predictions from ecological niche models of vector and reservoir species. *PLoS Neglected Tropical Diseases*, 4: e585. -8. Guisan A. & Thuiller W. (2005). Predicting species distribution: offering more than simple habitat models. *Ecology Letters*. 8: 993-1009. +8. Guisan A. & Thuiller W. (2005). Predicting species distribution: offering more than simple habitat models. *Ecology Letters*, 8: 993-1009. -9. Kearney M.R., Wintle B.A. & Porter W.P. (2010) Correlative and mechanistic models of species distribution provide congruent forecasts under climate change. *Conservation Letters*. 3: 203-213. +9. Kearney M.R., Wintle B.A. & Porter W.P. (2010) Correlative and mechanistic models of species distribution provide congruent forecasts under climate change. *Conservation Letters*, 3: 203-213. 10. Peterson A.T., Soberón J., Pearson R.G., Anderson R.P., Martinez-Meyer E., Nakamura M., Araújo M.B. (2011). Ecological niches and geographic distributions. Princeton, New Jersey: Monographs in Population Biology, 49. Princeton University Press. diff --git a/inst/shiny/modules/envs_ecoclimate.md b/inst/shiny/modules/envs_ecoclimate.md index 3d363efea..fb7692926 100644 --- a/inst/shiny/modules/envs_ecoclimate.md +++ b/inst/shiny/modules/envs_ecoclimate.md @@ -2,7 +2,7 @@ **BACKGROUND** -The ecoClimate project (www.ecoclimate.org) provides an open database of processed climatic simulations in a user-friendly format and at a resolution suitable for macroecological and biogeographic studies (Lima-Ribeiro et al. 2015; Varela et al. 2015). Monthly simulations of precipitation as well as mean, maximum, and minimum temperature for various time periods and coupled atmosphere-ocean global climate/circulation models (AOGCMs) were downloaded from the CMIP5 and PMIP3 projects. For ecoClimate, all data were downscaled to 0.5° resolution, according to the standard change-factor approach (Wilby et al. 2004). The 19 bioclimatic variables described in WorldClim (Hijmans et al. 2005) were generated from the downscaled data. This procedure was done using a script developed by Matheus Lima-Ribeiro in https://github.com/ecoClimate. +The ecoClimate project ( ecoclimate.org) provides an open database of processed climatic simulations in a user-friendly format and at a resolution suitable for macroecological and biogeographic studies (Lima-Ribeiro et al. 2015; Varela et al. 2015). Monthly simulations of precipitation as well as mean, maximum, and minimum temperature for various time periods and coupled atmosphere-ocean global climate/circulation models (AOGCMs) were downloaded from the CMIP5 and PMIP3 projects. For ecoClimate, all data were downscaled to 0.5° resolution, according to the standard change-factor approach (Wilby et al. 2004). The 19 bioclimatic variables described in WorldClim (Hijmans et al. 2005) were generated from the downscaled data. This procedure was done using a script developed by Matheus Lima-Ribeiro in github.com/ecoClimate. **IMPLEMENTATION** @@ -10,10 +10,10 @@ The dataset available in Wallace includes simulations for modern times (1950-199 **REFERENCES** -Hijmans, R.J., Cameron, S.E., Parra, J.L., Jones, P.G., & Jarvis, A. (2005). Very high resolution interpolated climate surfaces for global land areas. *International Journal of Climatology*, 25(15), 1965-1978. https://doi.org/10.1002/joc.1276 +Hijmans, R.J., Cameron, S.E., Parra, J.L., Jones, P.G., & Jarvis, A. (2005). Very high resolution interpolated climate surfaces for global land areas. *International Journal of Climatology*, 25(15), 1965-1978. DOI: 10.1002/joc.1276 -Lima-Ribeiro, M.S., Varela, S., González-Hernández, J., de Oliveira, G., Diniz-Filho, J.A.F., & Terribile, L.C. (2015). EcoClimate: a database of climate data from multiple models for past, present, and future for macroecologists and biogeographers. *Biodiversity Informatics*, 10, 1-21. https://doi.org/10.17161/bi.v10i0.4955 +Lima-Ribeiro, M.S., Varela, S., González-Hernández, J., de Oliveira, G., Diniz-Filho, J.A.F., & Terribile, L.C. (2015). EcoClimate: a database of climate data from multiple models for past, present, and future for macroecologists and biogeographers. *Biodiversity Informatics*, 10, 1-21. DOI: 10.17161/bi.v10i0.4955 -Varela, S., Lima-Ribeiro, M. S., & Terribile, L. C. (2015). A Short Guide to the Climatic Variables of the Last Glacial Maximum for Biogeographers. *PloS One*, 10(6), e0129037. https://doi.org/10.1371/journal.pone.0129037 +Varela, S., Lima-Ribeiro, M. S., & Terribile, L. C. (2015). A Short Guide to the Climatic Variables of the Last Glacial Maximum for Biogeographers. *PloS One*, 10(6), e0129037. DOI: 10.1371/journal.pone.0129037 -Wilby, R.L., Charles, S.P., Zorita, E., Timbal, B., Whetton, P., Mearns, L.O. (2004). Guidelines for use of climate scenarios developed from statistical downscaling methods. *Intergovernmental Panel on Climate Change Report supporting material*, Available from the DDC of IPCC TGCIA. https://www.ipcc-data.org/guidelines/dgm_no2_v1_09_2004.pdf +Wilby, R.L., Charles, S.P., Zorita, E., Timbal, B., Whetton, P., Mearns, L.O. (2004). Guidelines for use of climate scenarios developed from statistical downscaling methods. *Intergovernmental Panel on Climate Change Report supporting material*, Available from the DDC of IPCC TGCIA. pdf diff --git a/inst/shiny/modules/envs_worldclim.md b/inst/shiny/modules/envs_worldclim.md index c6760301d..4bb901d8e 100644 --- a/inst/shiny/modules/envs_worldclim.md +++ b/inst/shiny/modules/envs_worldclim.md @@ -35,8 +35,8 @@ The “Batch” option will load the environmental variables selected at the cho **REFERENCES** -Fick, S.E., & Hijmans, R.J. (2017). WorldClim 2: new 1-km spatial resolution climate surfaces for global land areas. *International Journal of Climatology*, 37(12), 4302-4315. https://doi.org/10.1002/joc.5086 +Fick, S.E., & Hijmans, R.J. (2017). WorldClim 2: new 1-km spatial resolution climate surfaces for global land areas. *International Journal of Climatology*, 37(12), 4302-4315. DOI: 10.1002/joc.5086 -Hijmans, R.J., Cameron, S.E., Parra, J.L., Jones, P.G., & Jarvis, A. (2005). Very high resolution interpolated climate surfaces for global land areas. *International Journal of Climatology*, 25(15), 1965-1978. https://doi.org/10.1002/joc.1276 +Hijmans, R.J., Cameron, S.E., Parra, J.L., Jones, P.G., & Jarvis, A. (2005). Very high resolution interpolated climate surfaces for global land areas. *International Journal of Climatology*, 25(15), 1965-1978. DOI: 10.1002/joc.1276 -Hijmans, R.J., et al. (2021). raster: Geographic Data Analysis and Modeling. R package version 3.4-13. https://CRAN.R-project.org/package=raster +Hijmans, R.J., et al. (2021). raster: Geographic Data Analysis and Modeling. R package version 3.4-13. CRAN diff --git a/inst/shiny/modules/espace_nicheOv.md b/inst/shiny/modules/espace_nicheOv.md index be6c7902d..37d0fba5b 100644 --- a/inst/shiny/modules/espace_nicheOv.md +++ b/inst/shiny/modules/espace_nicheOv.md @@ -14,18 +14,18 @@ Users can download a .png of the plots corresponding to the niche overlap and si **REFERENCES** -Barve, N., Barve, V., Jiménez-Valverde, A., Lira-Noriega, A., Maher, S.P., Peterson, A.T., Soberón, J., & Villalobos, F. (2011). The crucial role of the accessible area in ecological niche modeling and species distribution modeling. *Ecological Modelling*, 222(11), 1810–1819. DOI:10.1016/j.ecolmodel.2011.02.011 +Barve, N., Barve, V., Jiménez-Valverde, A., Lira-Noriega, A., Maher, S.P., Peterson, A.T., Soberón, J., & Villalobos, F. (2011). The crucial role of the accessible area in ecological niche modeling and species distribution modeling. *Ecological Modelling*, 222(11), 1810–1819. DOI: 10.1016/j.ecolmodel.2011.02.011 -Broennimann, O., Fitzpatrick, M.C., Pearman, P.B., Petitpierre, B., Pellissier, L., Yoccoz, N.G., Thuiller, W., Fortin, M.J., Randin, C., Zimmermann, N.E., Graham, C.H., & Guisan, A. (2012). Measuring ecological niche overlap from occurrence and spatial environmental data. *Global Ecology and Biogeography*, 21(4), 481-497. DOI:10.1111/j.1466-8238.2011.00698.x +Broennimann, O., Fitzpatrick, M.C., Pearman, P.B., Petitpierre, B., Pellissier, L., Yoccoz, N.G., Thuiller, W., Fortin, M.J., Randin, C., Zimmermann, N.E., Graham, C.H., & Guisan, A. (2012). Measuring ecological niche overlap from occurrence and spatial environmental data. *Global Ecology and Biogeography*, 21(4), 481-497. DOI: 10.1111/j.1466-8238.2011.00698.x Broennimann, O., Di Cola V., & Guisan, A. (2016). ecospat: Spatial Ecology Miscellaneous Methods. R package version 2.1.1. CRAN -Colwell, R.K., & Futuyma, D.J. (1971). On the Measurement of Niche Breadth and Overlap. *Ecology*, 52(4), 567-576. DOI:10.2307/1934144 +Colwell, R.K., & Futuyma, D.J. (1971). On the Measurement of Niche Breadth and Overlap. *Ecology*, 52(4), 567-576. DOI: 10.2307/1934144 -Guisan, A., Petitpierre, B., Broennimann, O., Daehler, C., & Kueffer, C. (2014). Unifying niche shift studies: Insights from biological invasions. *Trends in Ecology & Evolution*, 29(5), 260–269. DOI:10.1016/j.tree.2014.02.009 +Guisan, A., Petitpierre, B., Broennimann, O., Daehler, C., & Kueffer, C. (2014). Unifying niche shift studies: Insights from biological invasions. *Trends in Ecology & Evolution*, 29(5), 260–269. DOI: 10.1016/j.tree.2014.02.009 -Guisan, A., & Zimmermann, N.E. (2000) Predictive habitat distribution models in ecology. *Ecological Modelling*, 135(2-3), 147-186. DOI:10.1016/S0304-3800(00)00354-9 +Guisan, A., & Zimmermann, N.E. (2000) Predictive habitat distribution models in ecology. *Ecological Modelling*, 135(2-3), 147-186. DOI: 10.1016/S0304-3800(00)00354-9 Schoener, T.W. (1968). Anolis lizards of Bimini: resource partitioning in a complex fauna. *Ecology*, 49(4), 704-726. DOI:10.2307/1935534 -Warren, D.L., Glor, R.E., & Turelli, M. (2008). Environmental niche equivalency versus conservatism: quantitative approaches to niche evolution. *Evolution*, 62(11), 2868–2883. DOI:10.1111/j.1558-5646.2008.00482.x +Warren, D.L., Glor, R.E., & Turelli, M. (2008). Environmental niche equivalency versus conservatism: quantitative approaches to niche evolution. *Evolution*, 62(11), 2868–2883. DOI: 10.1111/j.1558-5646.2008.00482.x diff --git a/inst/shiny/modules/espace_occDens.md b/inst/shiny/modules/espace_occDens.md index 0fdbdf709..71746aae0 100644 --- a/inst/shiny/modules/espace_occDens.md +++ b/inst/shiny/modules/espace_occDens.md @@ -12,12 +12,12 @@ Users can download a .png image of the density grid. **REFERENCES** -Broennimann, O., Fitzpatrick, M.C., Pearman, P.B., Petitpierre, B., Pellissier, L., Yoccoz, N.G., Thuiller, W., Fortin, M.J., Randin, C., Zimmermann, N.E., Graham, C.H., & Guisan, A. (2012). Measuring ecological niche overlap from occurrence and spatial environmental data. *Global Ecology and Biogeography*, 21(4), 481-497. DOI:10.1111/j.1466-8238.2011.00698.x +Broennimann, O., Fitzpatrick, M.C., Pearman, P.B., Petitpierre, B., Pellissier, L., Yoccoz, N.G., Thuiller, W., Fortin, M.J., Randin, C., Zimmermann, N.E., Graham, C.H., & Guisan, A. (2012). Measuring ecological niche overlap from occurrence and spatial environmental data. *Global Ecology and Biogeography*, 21(4), 481-497. DOI: 10.1111/j.1466-8238.2011.00698.x -Calenge, C. (2006). The package adehabitat for the R software: tool for the analysis of space and habitat use by animals. *Ecological Modelling*, 197, 1035. DOI:10.1016/j.ecolmodel.2006.03.017 +Calenge, C. (2006). The package adehabitat for the R software: tool for the analysis of space and habitat use by animals. *Ecological Modelling*, 197, 1035. DOI: 10.1016/j.ecolmodel.2006.03.017 -Di Cola, V., Broennimann, O., Petitpierre, B., Breiner, F.T., d’Amen, M., Randin, C., Engler, R., Pottier, J., Pio, D., Dubuis, A., Pellissier, L., Mateo, R.G., Hordijk, W., Salamin, N., & Guisan, A. (2017). ecospat: an R package to support spatial analyses and modeling of species niches and distributions. *Ecography*, 40(6), 774-787. DOI:10.1111/ecog.02671 +Di Cola, V., Broennimann, O., Petitpierre, B., Breiner, F.T., d’Amen, M., Randin, C., Engler, R., Pottier, J., Pio, D., Dubuis, A., Pellissier, L., Mateo, R.G., Hordijk, W., Salamin, N., & Guisan, A. (2017). ecospat: an R package to support spatial analyses and modeling of species niches and distributions. *Ecography*, 40(6), 774-787. DOI: 10.1111/ecog.02671 Duong, T. (2022). ks: Kernel Smoothing. R package version 1.13.5, CRAN -Gerstner, B.E., Kass, J.M., Kays, R., Helgen, K.M., & Anderson, R.P. (2018). Revised distributional estimates for the recently discovered olinguito (Bassaricyon neblina), with comments on natural and taxonomic history. *Journal of Mammalogy*, 99(2), 321-332. DOI:0.1093/jmammal/gyy012 +Gerstner, B.E., Kass, J.M., Kays, R., Helgen, K.M., & Anderson, R.P. (2018). Revised distributional estimates for the recently discovered olinguito (Bassaricyon neblina), with comments on natural and taxonomic history. *Journal of Mammalogy*, 99(2), 321-332. DOI: 0.1093/jmammal/gyy012 diff --git a/inst/shiny/modules/espace_pca.md b/inst/shiny/modules/espace_pca.md index 9a9e96004..a59ba8724 100644 --- a/inst/shiny/modules/espace_pca.md +++ b/inst/shiny/modules/espace_pca.md @@ -20,14 +20,14 @@ Users have the option to download a zip file containing .png files of the scatte **REFERENCES** -Blonder, B., Morrow, C.B., Maitner, B., Harris, D.J., Lamanna, C., Violle, C., Enquist, B.J., & Kerkhoff, A.J. (2018). New approaches for delineating n‐dimensional hypervolumes. *Methods in Ecology and Evolution*, 9(2), 305-319. DOI:10.1111/2041-210X.12865 +Blonder, B., Morrow, C.B., Maitner, B., Harris, D.J., Lamanna, C., Violle, C., Enquist, B.J., & Kerkhoff, A.J. (2018). New approaches for delineating n‐dimensional hypervolumes. *Methods in Ecology and Evolution*, 9(2), 305-319. DOI: 10.1111/2041-210X.12865 -Broennimann, O., Fitzpatrick, M.C., Pearman, P.B., Petitpierre, B., Pellissier, L., Yoccoz, N.G., Thuiller, W., Fortin, M.J., Randin, C., Zimmermann, N.E., Graham, C.H., & Guisan, A. (2012) Measuring ecological niche overlap from occurrence and spatial environmental data. *Global Ecology and Biogeography*, 21, 481-497. DOI:10.1111/j.1466-8238.2011.00698.x +Broennimann, O., Fitzpatrick, M.C., Pearman, P.B., Petitpierre, B., Pellissier, L., Yoccoz, N.G., Thuiller, W., Fortin, M.J., Randin, C., Zimmermann, N.E., Graham, C.H., & Guisan, A. (2012) Measuring ecological niche overlap from occurrence and spatial environmental data. *Global Ecology and Biogeography*, 21, 481-497. DOI: 10.1111/j.1466-8238.2011.00698.x -Dray, S., & Dufour, A-B. (2007). The ade4 Package: Implementing the Duality Diagram for Ecologists. *Journal of Statistical Software*, 22(4), 1–20. DOI:10.18637/jss.v022.i04 +Dray, S., & Dufour, A-B. (2007). The ade4 Package: Implementing the Duality Diagram for Ecologists. *Journal of Statistical Software*, 22(4), 1–20. DOI: 10.18637/jss.v022.i04 -Legendre, P., & Legendre, L. (2012). Ordination in reduced space. *Numerical Ecology*, 2, 425-520. DOI:10.1016/B978-0-444-53868-0.50009-5 +Legendre, P., & Legendre, L. (2012). Ordination in reduced space. *Numerical Ecology*, 2, 425-520. DOI: 10.1016/B978-0-444-53868-0.50009-5 -Navarro, J., Cardador, L., & Brown, R. (2015). Spatial distribution and ecological niches of non-breeding planktivorous petrels. *Scientific Reports*, 5, 12164. DOI:10.1038/srep12164 +Navarro, J., Cardador, L., & Brown, R. (2015). Spatial distribution and ecological niches of non-breeding planktivorous petrels. *Scientific Reports*, 5, 12164. DOI: 10.1038/srep12164 -Thioulouse, J., Dray, S., Dufour, A., Siberchicot, A., Jombart, T., Pavoine, S. (2018). Multivariate Analysis of Ecological Data with ade4. *Springer*. DOI:10.1007/978-1-4939-8850-1 +Thioulouse, J., Dray, S., Dufour, A., Siberchicot, A., Jombart, T., Pavoine, S. (2018). Multivariate Analysis of Ecological Data with ade4. *Springer*. DOI: 10.1007/978-1-4939-8850-1 diff --git a/inst/shiny/modules/model_bioclim.md b/inst/shiny/modules/model_bioclim.md index 031d15536..55fd1a564 100644 --- a/inst/shiny/modules/model_bioclim.md +++ b/inst/shiny/modules/model_bioclim.md @@ -12,8 +12,8 @@ This model uses the R package `dismo` to build BIOCLIM models, and evaluates the **REFERENCES** -Booth, T.H., Nix, H.A., Busby J.R., & Hutchinson, M.F. (2014). BIOCLIM: The first species distribution modelling package, its early applications and relevance to most current MaxEnt studies. *Diversity and Distributions*, 20(1), 1-9. https://doi.org/10.1111/ddi.12144 +Booth, T.H., Nix, H.A., Busby J.R., & Hutchinson, M.F. (2014). BIOCLIM: The first species distribution modelling package, its early applications and relevance to most current MaxEnt studies. *Diversity and Distributions*, 20(1), 1-9. DOI: 10.1111/ddi.12144 -Hijmans, R. J., & Graham, C.H. (2006). The ability of climate envelope models to predict the effect of climate change on species distributions. *Global Change Biology*, 12(12), 2272-2281. https://doi.org/10.1111/j.1365-2486.2006.01256.x +Hijmans, R. J., & Graham, C.H. (2006). The ability of climate envelope models to predict the effect of climate change on species distributions. *Global Change Biology*, 12(12), 2272-2281. DOI: 10.1111/j.1365-2486.2006.01256.x -Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. https://doi.org/10.1111/2041-210X.12261 +Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. DOI: 10.1111/2041-210X.12261 diff --git a/inst/shiny/modules/model_maxent.md b/inst/shiny/modules/model_maxent.md index 25f6bd5f6..5e43114fe 100644 --- a/inst/shiny/modules/model_maxent.md +++ b/inst/shiny/modules/model_maxent.md @@ -42,28 +42,28 @@ The best fix for this is to restart R. **REFERENCES** -Elith, J., Graham, C.H., Anderson, R.P., Dudík, M., Ferrier, S., Guisan, A., Hijmans, R.J., Huettmann, F., Leathwick, J.R., Leahmann, A., Li, J., Lohmann, L.G., Loiselle, B.A., Manion, G., Moritz, C., Nakamura, M., Nakazawa, Y., Overton, J.M., Peterson, A.T., Phillips, S.J., Richardson, K.S., Scachetti-Pereira, R., Schapire, R.E., Soberón, J., Williams, S., Wisz, M.S., & Zimmermann, N.E. (2006). Novel methods improve prediction of species' distributions from occurrence data. *Ecography*, 29(2), 129-151. https://doi.org/10.1111/j.2006.0906-7590.04596.x +Elith, J., Graham, C.H., Anderson, R.P., Dudík, M., Ferrier, S., Guisan, A., Hijmans, R.J., Huettmann, F., Leathwick, J.R., Leahmann, A., Li, J., Lohmann, L.G., Loiselle, B.A., Manion, G., Moritz, C., Nakamura, M., Nakazawa, Y., Overton, J.M., Peterson, A.T., Phillips, S.J., Richardson, K.S., Scachetti-Pereira, R., Schapire, R.E., Soberón, J., Williams, S., Wisz, M.S., & Zimmermann, N.E. (2006). Novel methods improve prediction of species' distributions from occurrence data. *Ecography*, 29(2), 129-151. DOI: 10.1111/j.2006.0906-7590.04596.x -Elith, J., Phillips, S.J., Hastie, T., Dudík, M., Chee, Y.E., & Yates, C.J. (2011). A statistical explanation of MaxEnt for ecologists. *Diversity and Distributions*, 17(1), 43-57. https://doi.org/10.1111/j.1472-4642.2010.00725.x +Elith, J., Phillips, S.J., Hastie, T., Dudík, M., Chee, Y.E., & Yates, C.J. (2011). A statistical explanation of MaxEnt for ecologists. *Diversity and Distributions*, 17(1), 43-57. DOI: 10.1111/j.1472-4642.2010.00725.x -Hernandez, P.A., Graham, C.H., Master, L.L., & Albert, D.L. (2006). The effect of sample size and species characteristics on performance of different species distribution modeling methods. *Ecography*, 29(5), 773-785. https://doi.org/10.1111/j.0906-7590.2006.04700.x +Hernandez, P.A., Graham, C.H., Master, L.L., & Albert, D.L. (2006). The effect of sample size and species characteristics on performance of different species distribution modeling methods. *Ecography*, 29(5), 773-785. DOI: 10.1111/j.0906-7590.2006.04700.x -Hijmans, R.J., Phillips, S., Leathwick, J., & Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. https://CRAN.R-project.org/package=dismo +Hijmans, R.J., Phillips, S., Leathwick, J., & Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. CRAN -James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). *An Introduction to Statistical Learning with applications in R*. Springer. https://doi.org/10.1007/978-1-4614-7138-7 +James, G., Witten, D., Hastie, T., & Tibshirani, R. (2013). *An Introduction to Statistical Learning with applications in R*. Springer. DOI: 10.1007/978-1-4614-7138-7 -Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 https://CRAN.R-project.org/package=ENMeval +Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 CRAN -Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: What it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. https://doi.org/10.1111/j.1600-0587.2013.07872.x +Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: What it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. DOI: 10.1111/j.1600-0587.2013.07872.x -Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. https://doi.org/10.1111/2041-210X.12261 +Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. DOI: 10.1111/2041-210X.12261 -Phillips, S.J., Anderson, R.P., Schapire, R.E. (2006) Maximum entropy modeling of species geographic distributions. *Ecological Modelling*, 190(3-4), 231-259. https://doi.org/10.1016/j.ecolmodel.2005.03.026 +Phillips, S.J., Anderson, R.P., Schapire, R.E. (2006) Maximum entropy modeling of species geographic distributions. *Ecological Modelling*, 190(3-4), 231-259. DOI: 10.1016/j.ecolmodel.2005.03.026 -Phillips, S.J., & Dudík, M. (2008). Modeling of species distributions with Maxent: new extensions and a comprehensive evaluation. *Ecography*, 31(2), 161-175. https://doi.org/10.1111/j.0906-7590.2008.5203.x +Phillips, S.J., & Dudík, M. (2008). Modeling of species distributions with Maxent: new extensions and a comprehensive evaluation. *Ecography*, 31(2), 161-175. DOI: 10.1111/j.0906-7590.2008.5203.x -Phillips, S. (2021). maxnet: Fitting 'Maxent' Species Distribution Models with 'glmnet'. CRAN. R package version 0.4.1. https://cran.r-project.org/web/packages/maxnet/index.html +Phillips, S. (2021). maxnet: Fitting 'Maxent' Species Distribution Models with 'glmnet'. CRAN. R package version 0.4.1. CRAN -Radosavljevic, A., & Anderson, R.P. (2014). Making better Maxent models of species distributions: complexity, overfitting and evaluation. *Journal of Biogeography*, 41(4), 629-643. https://doi.org/10.1111/jbi.12227 +Radosavljevic, A., & Anderson, R.P. (2014). Making better Maxent models of species distributions: complexity, overfitting and evaluation. *Journal of Biogeography*, 41(4), 629-643. DOI: 10.1111/jbi.12227 -Warren, D.L., & Seifert, S.N. (2011). Ecological niche modeling in Maxent : the importance of model complexity and the performance of model selection criteria. *Ecological Applications*, 21(2), 335-342. https://doi.org/10.1890/10-1171.1 +Warren, D.L., & Seifert, S.N. (2011). Ecological niche modeling in Maxent : the importance of model complexity and the performance of model selection criteria. *Ecological Applications*, 21(2), 335-342. DOI: 10.1890/10-1171.1 diff --git a/inst/shiny/modules/occs_paleoDb.md b/inst/shiny/modules/occs_paleoDb.md index f4d105d46..1ba7b7c1d 100644 --- a/inst/shiny/modules/occs_paleoDb.md +++ b/inst/shiny/modules/occs_paleoDb.md @@ -12,6 +12,6 @@ The records used in downstream analyses in Wallace are filtered to remove those **REFERENCES** -Varela, S., González-Hernández, J., Sgarbi, L. F., Marshall, C., Uhen, M. D., Peters, S., & McClennen, M. (2015). paleobioDB: an R package for downloading, visualizing and processing data from the Paleobiology Database. *Ecography*, 38(4), 419–425. https://doi.org/10.1111/ecog.01154 +Varela, S., González-Hernández, J., Sgarbi, L. F., Marshall, C., Uhen, M. D., Peters, S., & McClennen, M. (2015). paleobioDB: an R package for downloading, visualizing and processing data from the Paleobiology Database. *Ecography*, 38(4), 419–425. DOI: 10.1111/ecog.01154 -Varela, S., Lobo, J. M., & Hortal, J. (2011). Using species distribution models in paleobiogeography: A matter of data, predictors and concepts. Palaeogeography, Palaeoclimatology, *Palaeoecology*, 310(3), 451–463. https://doi.org/10.1016/j.palaeo.2011.07.021 +Varela, S., Lobo, J. M., & Hortal, J. (2011). Using species distribution models in paleobiogeography: A matter of data, predictors and concepts. *Palaeogeography, Palaeoclimatology, Palaeoecology*, 310(3), 451–463. DOI: 10.1016/j.palaeo.2011.07.021 diff --git a/inst/shiny/modules/occs_queryDb.md b/inst/shiny/modules/occs_queryDb.md index aad7967f1..f8589fb04 100644 --- a/inst/shiny/modules/occs_queryDb.md +++ b/inst/shiny/modules/occs_queryDb.md @@ -14,17 +14,17 @@ For all options in this module, records used in downstream analyses in *Wallace* **REFERENCES** -Anderson, R.P., Araújo, M.B., Guisan, A., Lobo, J.M., Martínez-Meyer, E., Peterson, A.T., & Soberón, J.M.. (2020). Optimizing biodiversity informatics to improve information flow, data quality, and utility for science and society. *Frontiers of Biogeography*, 12(3), e47839. https://doi.org/10.21425/F5FBG47839 +Anderson, R.P., Araújo, M.B., Guisan, A., Lobo, J.M., Martínez-Meyer, E., Peterson, A.T., & Soberón, J.M.. (2020). Optimizing biodiversity informatics to improve information flow, data quality, and utility for science and society. *Frontiers of Biogeography*, 12(3), e47839. DOI: 10.21425/F5FBG47839 -Chamberlain, S., Ram, K., & Hart, T. (2021). spocc: Interface to Species Occurrence Data Sources. R package version 1.2.0. https://github.com/ropensci/spocc +Chamberlain, S., Ram, K., & Hart, T. (2021). spocc: Interface to Species Occurrence Data Sources. R package version 1.2.0. GitHub -Gaiji, S., Chavan, V., Ariño, A.H., Otegui, J., Hobern, D., Sood, R., & Robles, E. (2013). Content assessment of the primary biodiversity data published through GBIF network: status, challenges and potentials. *Biodiversity Informatics*, 8(2), 94-172. https://doi.org/10.17161/bi.v8i2.4124 +Gaiji, S., Chavan, V., Ariño, A.H., Otegui, J., Hobern, D., Sood, R., & Robles, E. (2013). Content assessment of the primary biodiversity data published through GBIF network: status, challenges and potentials. *Biodiversity Informatics*, 8(2), 94-172. DOI: 10.17161/bi.v8i2.4124 -Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., & Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. https://doi.org/10.1111/ecog.05618 +Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., & Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. DOI: 10.1111/ecog.05618 -Sullivan, B.L., Wood, C.L., Iliff, M.J., Bonney, R.E., Fink, D., & Kelling, S. (2009). eBird: A citizen-based bird observation network in the biological sciences. *Biological Conservation*, 142(10), 2282-2292. https://doi.org/10.1016/j.biocon.2009.05.006 +Sullivan, B.L., Wood, C.L., Iliff, M.J., Bonney, R.E., Fink, D., & Kelling, S. (2009). eBird: A citizen-based bird observation network in the biological sciences. *Biological Conservation*, 142(10), 2282-2292. DOI: 10.1016/j.biocon.2009.05.006 -Walters, M., & Scholes, R. J. (2017). The GEO Handbook on Biodiversity Observation Networks. Springer International Publishing. https://doi.org/10.1007/978-3-319-27288-7 +Walters, M., & Scholes, R. J. (2017). The GEO Handbook on Biodiversity Observation Networks. Springer International Publishing. DOI: 10.1007/978-3-319-27288-7 diff --git a/inst/shiny/modules/part_nonSpat.md b/inst/shiny/modules/part_nonSpat.md index afcae7721..7751a51c1 100644 --- a/inst/shiny/modules/part_nonSpat.md +++ b/inst/shiny/modules/part_nonSpat.md @@ -12,8 +12,8 @@ These non-spatial partitions are either via a: 1) jackknife procedure where each **REFERENCES** -Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. https://doi.org/10.1111/2041-210X.12261 +Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. DOI: 10.1111/2041-210X.12261 -Pearson, R.G., Raxworthy, C.J., Nakamura, M., & Peterson, T.A. (2007). Predicting species distributions from small numbers of occurrence records: a test case using cryptic geckos in Madagascar. *Journal of Biogeography*, 34(1), 102-117. https://doi.org/10.1111/j.1365-2699.2006.01594.x +Pearson, R.G., Raxworthy, C.J., Nakamura, M., & Peterson, T.A. (2007). Predicting species distributions from small numbers of occurrence records: a test case using cryptic geckos in Madagascar. *Journal of Biogeography*, 34(1), 102-117. DOI: 10.1111/j.1365-2699.2006.01594.x -Shcheglovitova, M. & R. P. Anderson. (2013). Estimating optimal complexity for ecological niche models: a jackknife approach for species with small sample sizes. *Ecological Modelling*, 269, 9-17. https://doi.org/10.1016/j.ecolmodel.2013.08.011 +Shcheglovitova, M. & R. P. Anderson. (2013). Estimating optimal complexity for ecological niche models: a jackknife approach for species with small sample sizes. *Ecological Modelling*, 269, 9-17. DOI: 10.1016/j.ecolmodel.2013.08.011 diff --git a/inst/shiny/modules/part_spat.md b/inst/shiny/modules/part_spat.md index 77c780d64..5101e9514 100644 --- a/inst/shiny/modules/part_spat.md +++ b/inst/shiny/modules/part_spat.md @@ -12,4 +12,4 @@ The user can choose one of three means of spatial partitioning: the 1) "block", **REFERENCES** -Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. https://doi.org/10.1111/2041-210X.12261 +Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. DOI: 10.1111/2041-210X.12261 diff --git a/inst/shiny/modules/penvs_bgExtent.md b/inst/shiny/modules/penvs_bgExtent.md index 3a3056f0f..62ed3f82e 100644 --- a/inst/shiny/modules/penvs_bgExtent.md +++ b/inst/shiny/modules/penvs_bgExtent.md @@ -12,24 +12,24 @@ In this module, *Wallace* provides three simple ways to delimit a study region, **REFERENCES** -Acevedo, P., Jiménez‐Valverde, A., Lobo, J.M., & Real, R. (2012). Delimiting the geographical background in species distribution modelling. *Journal of Biogeography*, 39(8), 1383-1390. https://doi.org/10.1111/j.1365-2699.2012.02713.x +Acevedo, P., Jiménez‐Valverde, A., Lobo, J.M., & Real, R. (2012). Delimiting the geographical background in species distribution modelling. *Journal of Biogeography*, 39(8), 1383-1390. DOI: 10.1111/j.1365-2699.2012.02713.x -Anderson, R.P., & Raza A. (2010). The effect of the extent of the study region on GIS models of species geographic distributions and estimates of niche evolution: preliminary tests with montane rodents (genus *Nephelomys*) in Venezuela. *Journal of Biogeography*, 37(7), 1378-1393. https://doi.org/10.1111/j.1365-2699.2010.02290.x +Anderson, R.P., & Raza A. (2010). The effect of the extent of the study region on GIS models of species geographic distributions and estimates of niche evolution: preliminary tests with montane rodents (genus *Nephelomys*) in Venezuela. *Journal of Biogeography*, 37(7), 1378-1393. DOI: 10.1111/j.1365-2699.2010.02290.x -Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. *Annals of the New York Academy of Sciences*, 1297(1), 8-28. https://doi.org/10.1111/nyas.12264 +Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. *Annals of the New York Academy of Sciences*, 1297(1), 8-28. DOI: 10.1111/nyas.12264 Anderson, R. P. (2015). El modelado de nichos y distribuciones: no es simplemente "clic, clic, clic." [With English and French translations: Modeling niches and distributions: it's not just "click, click, click" and La modélisation de niche et de distributions: ce n'est pas juste "clic, clic, clic"]. *Biogeografía*, 8, 4-27. pdf -Barve, N., Barve, V., Jiménez-Valverde, A., Lira-Noriega, A., Maher, S.P., Peterson, A.T., Soberón, J., & Villalobos, F. (2011). The crucial role of the accessible area in ecological niche modeling and species distribution modeling. *Ecological Modelling*, 222(11), 1810–1819. https://doi.org/10.1016/j.ecolmodel.2011.02.011 +Barve, N., Barve, V., Jiménez-Valverde, A., Lira-Noriega, A., Maher, S.P., Peterson, A.T., Soberón, J., & Villalobos, F. (2011). The crucial role of the accessible area in ecological niche modeling and species distribution modeling. *Ecological Modelling*, 222(11), 1810–1819. DOI: 10.1016/j.ecolmodel.2011.02.011 -Franklin, J. (2010). *Mapping Species Distributions: Spatial Inference and Prediction*. Data for species distribution models: the biological data. Cambridge: Cambridge University Press. https://doi.org/10.1017/CBO9780511810602 +Franklin, J. (2010). *Mapping Species Distributions: Spatial Inference and Prediction*. Data for species distribution models: the biological data. Cambridge: Cambridge University Press. DOI: 10.1017/CBO9780511810602 -Gerstner, B.E., Kass, J.M., Kays, R., Helgen, K.M., & Anderson, R.P. (2018). Revised distributional estimates for the recently discovered olinguito (*Bassaricyon neblina*), with comments on natural and taxonomic history. *Journal of Mammalogy*, 99(2), 321-332. https://doi.org/10.1093/jmammal/gyy012 +Gerstner, B.E., Kass, J.M., Kays, R., Helgen, K.M., & Anderson, R.P. (2018). Revised distributional estimates for the recently discovered olinguito (*Bassaricyon neblina*), with comments on natural and taxonomic history. *Journal of Mammalogy*, 99(2), 321-332. DOI: 10.1093/jmammal/gyy012 -Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: What it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. https://doi.org/10.1111/j.1600-0587.2013.07872.x +Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: What it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. DOI: 10.1111/j.1600-0587.2013.07872.x -Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura M., & Araújo M.B. (2011). Modeling Ecological Niches. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. https://doi.org/10.23943/princeton/9780691136868.003.0005 +Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura M., & Araújo M.B. (2011). Modeling Ecological Niches. In: *Ecological Niches and Geographic Distributions*. Princeton, New Jersey: *Monographs in Population Biology*, 49. Princeton University Press. DOI: 10.23943/princeton/9780691136868.003.0005 -Saupe, E.E., Barve, V., Myers, C.E., Soberón, J., Barve, N., Hensz, C.M., Peterson, A.T., Owens, H.L., & Lira-Noriega, A. (2012). Variation in niche and distribution model performance: the need for a priori assessment of key causal factors. *Ecological Modelling*, 237-238, 11-22. https://doi.org/10.1016/j.ecolmodel.2012.04.001 +Saupe, E.E., Barve, V., Myers, C.E., Soberón, J., Barve, N., Hensz, C.M., Peterson, A.T., Owens, H.L., & Lira-Noriega, A. (2012). Variation in niche and distribution model performance: the need for a priori assessment of key causal factors. *Ecological Modelling*, 237-238, 11-22. DOI: 10.1016/j.ecolmodel.2012.04.001 -VanDerWal, J., Shoo, L.P., Graham, C., & Williams, S.E. (2009). Selecting pseudo-absence data for presence-only distribution modeling: How far should you stray from what you know?. *Ecological Modelling*, 220(4), 589-594. https://doi.org/10.1016/j.ecolmodel.2008.11.010 +VanDerWal, J., Shoo, L.P., Graham, C., & Williams, S.E. (2009). Selecting pseudo-absence data for presence-only distribution modeling: How far should you stray from what you know?. *Ecological Modelling*, 220(4), 589-594. DOI: 10.1016/j.ecolmodel.2008.11.010 diff --git a/inst/shiny/modules/penvs_drawBgExtent.md b/inst/shiny/modules/penvs_drawBgExtent.md index 28aa2a952..ec3122990 100644 --- a/inst/shiny/modules/penvs_drawBgExtent.md +++ b/inst/shiny/modules/penvs_drawBgExtent.md @@ -14,11 +14,11 @@ Wallace then masks the environmental grids by the resulting polygon. Users can d **REFERENCES** Bivand, R., Rundel, C., Pebesma, E., Stuetz, R., Hufthammer, K.O., Giraudoux, P., Davis, M, & Santilli, S. (2021). rgeos: Interface to Geometry Engine - Open Source ('GEOS'). CRAN. R package Version 0.5-0.9. -https://cran.r-project.org/web/packages/rgeos/index.html +CRAN Cheng, et al. (2022). leaflet: Create Interactive Web Maps with the JavaScript 'Leaflet' Library. R package Version 2.1. -https://rstudio.github.io/leaflet/ +GitHub Karambelkar, et al. (2018). leaflet.extras: Extra Functionality for 'leaflet' Package. R package Version 1.0. -https://bhaskarvk.github.io/leaflet.extras/ +GitHub diff --git a/inst/shiny/modules/poccs_removeByID.md b/inst/shiny/modules/poccs_removeByID.md index 156c9cf14..aa7b2bbf3 100644 --- a/inst/shiny/modules/poccs_removeByID.md +++ b/inst/shiny/modules/poccs_removeByID.md @@ -10,4 +10,4 @@ Users can select individual localities for removal from the analysis by specifyi **REFERENCES** -Gaiji, S., Chavan, V., Ariño, A.H., Otegui, J., Hobern, D., Sood, R., & Robles, E. (2013). Content assessment of the primary biodiversity data published through GBIF network: status, challenges and potentials. *Biodiversity Informatics*, 8(2), 94-172. https://doi.org/10.17161/bi.v8i2.4124 +Gaiji, S., Chavan, V., Ariño, A.H., Otegui, J., Hobern, D., Sood, R., & Robles, E. (2013). Content assessment of the primary biodiversity data published through GBIF network: status, challenges and potentials. *Biodiversity Informatics*, 8(2), 94-172. DOI: 10.17161/bi.v8i2.4124 diff --git a/inst/shiny/modules/poccs_selectOccs.md b/inst/shiny/modules/poccs_selectOccs.md index 89c977d97..0c31570c0 100644 --- a/inst/shiny/modules/poccs_selectOccs.md +++ b/inst/shiny/modules/poccs_selectOccs.md @@ -12,4 +12,4 @@ Occurrences that fall within (i.e. overlap with) the polygon are retained, and a **REFERENCES** -Gaiji, S., Chavan, V., Ariño, A.H., Otegui, J., Hobern, D., Sood, R., & Robles, E. (2013). Content assessment of the primary biodiversity data published through GBIF network: status, challenges and potentials. *Biodiversity Informatics*, 8(2), 94-172. https://doi.org/10.17161/bi.v8i2.4124 +Gaiji, S., Chavan, V., Ariño, A.H., Otegui, J., Hobern, D., Sood, R., & Robles, E. (2013). Content assessment of the primary biodiversity data published through GBIF network: status, challenges and potentials. *Biodiversity Informatics*, 8(2), 94-172. DOI: 10.17161/bi.v8i2.4124 diff --git a/inst/shiny/modules/poccs_thinOccs.md b/inst/shiny/modules/poccs_thinOccs.md index 4022fd07a..06fcc6322 100644 --- a/inst/shiny/modules/poccs_thinOccs.md +++ b/inst/shiny/modules/poccs_thinOccs.md @@ -12,16 +12,16 @@ If run with sufficient (independent) repetitions, `spThin` will produce at least **REFERENCES** -Aiello-Lammens, M.E., Boria, R.A., Radosavljevic, A., Vilela, B., & Anderson, R.P. (2015). spThin: an R package for spatial thinning of species occurrence records for use in ecological niche models. *Ecography*, 38(5), 541-545. https://doi.org/10.1111/ecog.01132 +Aiello-Lammens, M.E., Boria, R.A., Radosavljevic, A., Vilela, B., & Anderson, R.P. (2015). spThin: an R package for spatial thinning of species occurrence records for use in ecological niche models. *Ecography*, 38(5), 541-545. DOI: 10.1111/ecog.01132 -Anderson, R.P. (2003). Real vs. artefactual absences in species distributions: tests for *Oryzomys albigularis* (Rodentia: *Muridae*) in Venezuela. *Journal of Biogeography*, 30(4), 591-605. https://doi.org/10.1046/j.1365-2699.2003.00867.x +Anderson, R.P. (2003). Real vs. artefactual absences in species distributions: tests for *Oryzomys albigularis* (Rodentia: *Muridae*) in Venezuela. *Journal of Biogeography*, 30(4), 591-605. DOI: 10.1046/j.1365-2699.2003.00867.x -Boria, R.A., Olson, L.E., Goodman, S.M., & Anderson, R.P. (2014). Spatial filtering to reduce sampling bias can improve the performance of ecological niche models. *Ecological Modelling*, 275, 73-77. https://doi.org/10.1016/j.ecolmodel.2013.12.012 +Boria, R.A., Olson, L.E., Goodman, S.M., & Anderson, R.P. (2014). Spatial filtering to reduce sampling bias can improve the performance of ecological niche models. *Ecological Modelling*, 275, 73-77. DOI: 10.1016/j.ecolmodel.2013.12.012 -Kadmon, R., Farber O., & Danin A. (2004). Effect of roadside bias on the accuracy of predictive maps produced by bioclimatic models. *Ecological Applications*, 14(2), 401-413. https://doi.org/10.1890/02-5364 +Kadmon, R., Farber O., & Danin A. (2004). Effect of roadside bias on the accuracy of predictive maps produced by bioclimatic models. *Ecological Applications*, 14(2), 401-413. DOI: 10.1890/02-5364 -Phillips, S.J., Dudík, M., Elith, J., Graham, C.H., Lehmann, A., Leathwick, J., & Ferrier, S. (2009). Sample selection bias and presence-only distribution models: implications for background and pseudo-absence data. *Ecological Applications*, 19(1), 181-197. https://doi.org/10.1890/07-2153.1 +Phillips, S.J., Dudík, M., Elith, J., Graham, C.H., Lehmann, A., Leathwick, J., & Ferrier, S. (2009). Sample selection bias and presence-only distribution models: implications for background and pseudo-absence data. *Ecological Applications*, 19(1), 181-197. DOI: 10.1890/07-2153.1 -Varela, S., Anderson, R.P., García-Valdés, R., & Fernández-González, F. (2014). Environmental filters reduce the effects of sampling bias and improve predictions of ecological niche models. *Ecography*, 37(11), 1084-1091. https://doi.org/10.1111/j.1600-0587.2013.00441.x +Varela, S., Anderson, R.P., García-Valdés, R., & Fernández-González, F. (2014). Environmental filters reduce the effects of sampling bias and improve predictions of ecological niche models. *Ecography*, 37(11), 1084-1091. DOI: 10.1111/j.1600-0587.2013.00441.x -Veloz, S.D. (2009). Spatially autocorrelated sampling falsely inflates measures of accuracy for presence-only niche models. *Journal of Biogeography*, 36(12), 2290-2299. https://doi.org/10.1111/j.1365-2699.2009.02174.x +Veloz, S.D. (2009). Spatially autocorrelated sampling falsely inflates measures of accuracy for presence-only niche models. *Journal of Biogeography*, 36(12), 2290-2299. DOI: 10.1111/j.1365-2699.2009.02174.x diff --git a/inst/shiny/modules/rep_markdown.md b/inst/shiny/modules/rep_markdown.md index cfedcdc2b..32c934406 100644 --- a/inst/shiny/modules/rep_markdown.md +++ b/inst/shiny/modules/rep_markdown.md @@ -26,18 +26,18 @@ To generate a PDF of your session code, it is essential you have a working versi **REFERENCES** -Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. https://doi.org/10.1126/sciadv.aat4858 +Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. DOI: 10.1126/sciadv.aat4858 -Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. https://doi.org/10.1038/s41559-019-0972-5 +Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. DOI: 10.1038/s41559-019-0972-5 -Fitzpatrick, F.C., Lachmuth, S., & Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070.https://doi.org/10.1111/ecog.05700 +Fitzpatrick, F.C., Lachmuth, S., & Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070.DOI: 10.1111/ecog.05700 -Kass, J.M, Muscarella, R., Galante, P.J, Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. https://doi.org/10.1111/2041-210X.13628 +Kass, J.M, Muscarella, R., Galante, P.J, Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. DOI: 10.1111/2041-210X.13628 -Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., & Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. https://doi.org/10.1111/geb.12993 +Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., & Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. DOI: 10.1111/geb.12993 -Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., & Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. https://doi.org/10.1111/ecog.05618 +Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., & Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. DOI: 10.1111/ecog.05618 -Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. https://doi.org/10.1093/biosci/biz045 +Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. DOI: 10.1093/biosci/biz045 -Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. https://doi.org/10.1111/ecog.04960 +Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. DOI: 10.1111/ecog.04960 diff --git a/inst/shiny/modules/rep_refPackages.md b/inst/shiny/modules/rep_refPackages.md index 3fa1ca685..0f93e4a5d 100644 --- a/inst/shiny/modules/rep_refPackages.md +++ b/inst/shiny/modules/rep_refPackages.md @@ -12,22 +12,22 @@ Users can download a list of references for the R packages used in the analyses. **REFERENCES** -Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. https://doi.org/10.1126/sciadv.aat4858 +Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. DOI: 10.1126/sciadv.aat4858 -Boettiger, C. (2021). knitcitations: Citations for 'Knitr' Markdown Files. R package version 1.0.12. https://CRAN.R-project.org/package=knitcitations +Boettiger, C. (2021). knitcitations: Citations for 'Knitr' Markdown Files. R package version 1.0.12. CRAN -Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. https://doi.org/10.1038/s41559-019-0972-5 +Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. DOI: 10.1038/s41559-019-0972-5 -Fitzpatrick, F.C., Lachmuth, S., & Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070.https://doi.org/10.1111/ecog.05700 +Fitzpatrick, F.C., Lachmuth, S., & Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070.DOI: 10.1111/ecog.05700 -Kass, J.M, Muscarella, R., Galante, P.J, Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. https://doi.org/10.1111/2041-210X.13628 +Kass, J.M, Muscarella, R., Galante, P.J, Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. DOI: 10.1111/2041-210X.13628 -McLean, M.W. (2020). RefManageR: Straightforward 'BibTeX' and 'BibLaTeX' Bibliography Management. R package version 1.3.0. https://CRAN.R-project.org/package=RefManageR +McLean, M.W. (2020). RefManageR: Straightforward 'BibTeX' and 'BibLaTeX' Bibliography Management. R package version 1.3.0. CRAN -Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., & Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. https://doi.org/10.1111/geb.12993 +Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., & Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. DOI: 10.1111/geb.12993 -Owens, H. L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., & Guralnick, R.P. (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. https://doi.org/10.1111/ecog.05618 +Owens, H. L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., & Guralnick, R.P. (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. DOI: 10.1111/ecog.05618 -Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. https://doi.org/10.1093/biosci/biz045 +Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. DOI: 10.1093/biosci/biz045 -Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. https://doi.org/10.1111/ecog.04960 +Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. DOI: 10.1111/ecog.04960 diff --git a/inst/shiny/modules/rep_rmms.md b/inst/shiny/modules/rep_rmms.md index 405afb17b..a04ec56ce 100644 --- a/inst/shiny/modules/rep_rmms.md +++ b/inst/shiny/modules/rep_rmms.md @@ -12,20 +12,20 @@ Metadata from the Wallace analyses can be downloaded as a zip file via the `rang **REFERENCES** -Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. https://doi.org/10.1126/sciadv.aat4858 +Araújo, M.B., Anderson, R.P., Barbosa, A.M., Beale, C.M., Dormann, C.F., Early, R., Garcia, R.A., Guisan, A., Maiorano, L., Naimi, B., O’Hara, R.B., Zimmermann, N.E., & Rahbek, C. (2019). Standards for distribution models in biodiversity assessments. *Science Advances*, 5, 1. DOI: 10.1126/sciadv.aat4858 -Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. https://doi.org/10.1038/s41559-019-0972-5 +Feng, X., Park, D.S., Walker, C., Peterson, A.T., Merow, C., & Papeş, M. (2019). A checklist for maximizing reproducibility of ecological niche models. *Nature Ecology & Evolution*, 3, 1382–1395. DOI: 10.1038/s41559-019-0972-5 -Fitzpatrick, F.C., Lachmuth, S., Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070.https://doi.org/10.1111/ecog.05700 +Fitzpatrick, F.C., Lachmuth, S., Haydt, N.T. (2021). The ODMAP protocol: a new tool for standardized reporting that could revolutionize species distribution modeling. *Ecography*, 44(7), 1067-1070.DOI: 10.1111/ecog.05700 -Kass, J.M, Muscarella, R., Galante, P.J, Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. https://doi.org/10.1111/2041-210X.13628 +Kass, J.M, Muscarella, R., Galante, P.J, Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval 2.0: Redesigned for customizable and reproducible modeling of species’ niches and distributions. *Methods in Ecology and Evolution*, 12(9), 1602– 1608. DOI: 10.1111/2041-210X.13628 -Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. https://doi.org/10.1111/geb.12993 +Merow, C., Maitner, B.S., Owens, H.L., Kass, J.M., Enquist, B.J., Jetz, W., Guralnick, R.P. (2019). Species’ range model metadata standards: RMMS. *Global Ecology and Biogeography*, 28(12), 1912–1924. DOI: 10.1111/geb.12993 -Merow, C., Maitner, B., Owens, H., Kass, J., Enquist, B., Guralnik, R., Zurrell, D., & Koenig, C. (2021).rangeModelMetadata: Provides Templates for Metadata Files Associated with Species Range Models. R package v1.0.4. https://CRAN.R-project.org/package=rangeModelMetadata +Merow, C., Maitner, B., Owens, H., Kass, J., Enquist, B., Guralnik, R., Zurrell, D., & Koenig, C. (2021).rangeModelMetadata: Provides Templates for Metadata Files Associated with Species Range Models. R package v1.0.4. CRAN -Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. https://doi.org/10.1111/ecog.05618 +Owens, H.L., Merow, C., Maitner, B.S., Kass, J.M., Barve, V., Guralnick, R.P., (2021). occCite: Tools for querying and managing large biodiversity occurrence datasets. *Ecography*, 44(8), 1228-1235. DOI: 10.1111/ecog.05618 -Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. https://doi.org/10.1093/biosci/biz045 +Sofaer, H.R., Jarnevich, C.S., Pearse, I.S., Smyth, R.L, Auer, S., Cook, G.L., Edwards, T.C., Guala, G.F., Howard, T.G., Morisette, J.T., & Hamiliton, H. (2019). Development and delivery of species distribution models to inform decision-making. *BioScience*, 69(7), 544–557. DOI: 10.1093/biosci/biz045 -Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. https://doi.org/10.1111/ecog.04960 +Zurell, D., et al. (2020). A standard protocol for reporting species distribution models. *Ecography*, 43(9), 1261–1277. DOI: 10.1111/ecog.04960 diff --git a/inst/shiny/modules/vis_bioclimPlot.md b/inst/shiny/modules/vis_bioclimPlot.md index b0c6c0471..3dd7f7aeb 100644 --- a/inst/shiny/modules/vis_bioclimPlot.md +++ b/inst/shiny/modules/vis_bioclimPlot.md @@ -12,6 +12,6 @@ The envelope plot can be viewed in the "Results" tab. The axes of the plot repre **REFERENCES** -Booth, T.H., Nix, H.A., Busby J.R., & Hutchinson, M.F. (2014). BIOCLIM: The first species distribution modelling package, its early applications and relevance to most current MaxEnt studies. *Diversity and Distributions*, 20(1), 1-9. https://doi.org/10.1111/ddi.12144 +Booth, T.H., Nix, H.A., Busby J.R., & Hutchinson, M.F. (2014). BIOCLIM: The first species distribution modelling package, its early applications and relevance to most current MaxEnt studies. *Diversity and Distributions*, 20(1), 1-9. DOI: 10.1111/ddi.12144 -Hutchinson, G.E. (1957). "Concluding remarks". *Cold Spring Harbor Symposia on Quantitative Biology*, 22, 415–427. http://dx.doi.org/10.1101/SQB.1957.022.01.039 +Hutchinson, G.E. (1957). "Concluding remarks". *Cold Spring Harbor Symposia on Quantitative Biology*, 22, 415–427. DOI: 10.1101/SQB.1957.022.01.039 diff --git a/inst/shiny/modules/vis_mapPreds.md b/inst/shiny/modules/vis_mapPreds.md index 1f710e84f..b9a5c3b45 100644 --- a/inst/shiny/modules/vis_mapPreds.md +++ b/inst/shiny/modules/vis_mapPreds.md @@ -14,14 +14,14 @@ Users may then choose a thresholding rule (minimum training presence or 10 perce **REFERENCES** -Hijmans, R. J., Phillips, S., Leathwick, J., & Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. https://CRAN.R-project.org/package=dismo +Hijmans, R. J., Phillips, S., Leathwick, J., & Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. CRAN -Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 https://CRAN.R-project.org/package=ENMeval +Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 CRAN -Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: What it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. https://doi.org/10.1111/j.1600-0587.2013.07872.x +Merow, C., Smith, M.J., & Silander, J.A. (2013). A practical guide to MaxEnt for modeling species' distributions: What it does, and why inputs and settings matter. *Ecography*, 36(10), 1058-1069. DOI: 10.1111/j.1600-0587.2013.07872.x -Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). *Ecological Niches and Geographic Distributions*. Princeton, New Jersey. Princeton University Press. https://press.princeton.edu/books/paperback/9780691136882/ecological-niches-and-geographic-distributions-mpb-49 +Peterson, A.T., Soberón, J., Pearson, R.G., Anderson, R.P., Martinez-Meyer, E., Nakamura, M., & Araújo, M.B. (2011). *Ecological Niches and Geographic Distributions*. Princeton, New Jersey. Princeton University Press. Ecological Niches and Geographic Distributions -Phillips, S.J., Anderson, R.P., Dudík, M., Schapire, R.E., & Blair, M.E. (2017). Opening the black box: an open-source release of Maxent. *Ecography*, 40(7), 887-893. https://doi.org/10.1111/ecog.03049 +Phillips, S.J., Anderson, R.P., Dudík, M., Schapire, R.E., & Blair, M.E. (2017). Opening the black box: an open-source release of Maxent. *Ecography*, 40(7), 887-893. DOI: 10.1111/ecog.03049 -Yackulic, C.B., Chandler, R., Zipkin, E.F., Royle, J.A., Nichols, J.D., Campbell Grant, E.H., & Veran, S. (2013). Presence-only modelling using MAXENT: when can we trust the inferences?. *Methods in Ecology and Evolution*, 4(3), 236-243. https://doi.org/10.1111/2041-210x.12004 +Yackulic, C.B., Chandler, R., Zipkin, E.F., Royle, J.A., Nichols, J.D., Campbell Grant, E.H., & Veran, S. (2013). Presence-only modelling using MAXENT: when can we trust the inferences?. *Methods in Ecology and Evolution*, 4(3), 236-243. DOI: 10.1111/2041-210x.12004 diff --git a/inst/shiny/modules/vis_maxentEvalPlot.md b/inst/shiny/modules/vis_maxentEvalPlot.md index 80e75975a..8a71b16b2 100644 --- a/inst/shiny/modules/vis_maxentEvalPlot.md +++ b/inst/shiny/modules/vis_maxentEvalPlot.md @@ -12,9 +12,9 @@ Users can select which evaluation metric plot to view in the "Results" tab. Diff **REFERENCES** -Merow, C., Smith, M.J., Edwards, T.C., Guisan, A., McMahon, S.M., Normand, S., Thuiller, W., Wüest, R.O., Zimmermann, N.E., & Elith, J. (2014). What do we gain from simplicity versus complexity in species distribution models? *Ecography*, 37(12), 1267-1281. https://doi.org/10.1111/ecog.00845 +Merow, C., Smith, M.J., Edwards, T.C., Guisan, A., McMahon, S.M., Normand, S., Thuiller, W., Wüest, R.O., Zimmermann, N.E., & Elith, J. (2014). What do we gain from simplicity versus complexity in species distribution models? *Ecography*, 37(12), 1267-1281. DOI: 10.1111/ecog.00845 -Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. https://doi.org/10.1111/2041-210X.12261 +Muscarella, R., Galante, P.J., Soley-Guardia, M., Boria, R.A., Kass, J.M., Uriarte, M., & Anderson, R.P. (2014). ENMeval: An R package for conducting spatially independent evaluations and estimating optimal model complexity for Maxent ecological niche models. *Methods in Ecology and Evolution*, 5(11), 1198-1205. DOI: 10.1111/2041-210X.12261 -Radosavljevic, A., & Anderson, R.P. (2014). Making better Maxent models of species distributions: complexity, overfitting and evaluation. *Journal of Biogeography*, 41(4), 629-643. https://doi.org/10.1111/jbi.12227 +Radosavljevic, A., & Anderson, R.P. (2014). Making better Maxent models of species distributions: complexity, overfitting and evaluation. *Journal of Biogeography*, 41(4), 629-643. DOI: 10.1111/jbi.12227 diff --git a/inst/shiny/modules/vis_responsePlot.md b/inst/shiny/modules/vis_responsePlot.md index 1c065f65e..c1e08d035 100644 --- a/inst/shiny/modules/vis_responsePlot.md +++ b/inst/shiny/modules/vis_responsePlot.md @@ -14,5 +14,5 @@ Users must first select a model. Depending on the `ENMeval` settings selected in **REFERENCES** -Elith, J., & Graham, C.H. (2009). Do they? How do they? WHY do they differ? On finding reasons for differing performances of species distribution models. *Ecography*, 32, 66-77. https://doi.org/10.1111/j.1600-0587.2008.05505.x +Elith, J., & Graham, C.H. (2009). Do they? How do they? WHY do they differ? On finding reasons for differing performances of species distribution models. *Ecography*, 32, 66-77. DOI: 10.1111/j.1600-0587.2008.05505.x diff --git a/inst/shiny/modules/xfer_area.md b/inst/shiny/modules/xfer_area.md index f214c4475..7ba3e11de 100644 --- a/inst/shiny/modules/xfer_area.md +++ b/inst/shiny/modules/xfer_area.md @@ -19,12 +19,12 @@ NOTE: To reset the selected spatial transfer extent, a red *Reset* button is ava **REFERENCES** -Anderson R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. https://doi.org/10.1111/nyas.12264 +Anderson R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. DOI: 10.1111/nyas.12264 -Fitzpatrick, M. C., & Hargrove, W. W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. https://doi.org/10.1007/s10531-009-9584-8 +Fitzpatrick, M. C., & Hargrove, W. W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. DOI: 10.1007/s10531-009-9584-8 -Hijmans, R.J., Phillips, S., Leathwick, J., Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. https://CRAN.R-project.org/package=dismo +Hijmans, R.J., Phillips, S., Leathwick, J., Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. CRAN -Kass, J., Muscarella, R., Galante, P. J., Bohl, C. L., Pinilla-Buitrago, G. E., Boria, R. A., Soley-Guardia, M., Anderson, R. P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 https://CRAN.R-project.org/package=ENMeval +Kass, J., Muscarella, R., Galante, P. J., Bohl, C. L., Pinilla-Buitrago, G. E., Boria, R. A., Soley-Guardia, M., Anderson, R. P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 CRAN diff --git a/inst/shiny/modules/xfer_mess.md b/inst/shiny/modules/xfer_mess.md index d9a5807e8..c2534c340 100644 --- a/inst/shiny/modules/xfer_mess.md +++ b/inst/shiny/modules/xfer_mess.md @@ -13,15 +13,15 @@ Users must first select a model. Depending on the ENMeval (Kass et al. 2021) set **REFERENCES** -Anderson R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. https://doi.org/10.1111/nyas.12264 +Anderson R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. DOI: 10.1111/nyas.12264 -Elith, J., Kearney, M., Phillips, S. (2010). The art of modelling range-shifting species. Methods in Ecology and Evolution, 1(4), 330-342. https://doi.org/10.1111/j.2041-210X.2010.00036.x +Elith, J., Kearney, M., Phillips, S. (2010). The art of modelling range-shifting species. Methods in Ecology and Evolution, 1(4), 330-342. DOI: 10.1111/j.2041-210X.2010.00036.x -Fitzpatrick, M. C., Hargrove, W. W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. https://doi.org/10.1007/s10531-009-9584-8 +Fitzpatrick, M. C., Hargrove, W. W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. DOI: 10.1007/s10531-009-9584-8 -Hijmans, R.J., Phillips, S., Leathwick, J., Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. https://CRAN.R-project.org/package=dismo +Hijmans, R.J., Phillips, S., Leathwick, J., Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. CRAN -Kass, J., Muscarella, R., Galante, P. J., Bohl, C. L., Pinilla-Buitrago, G. E., Boria, R. A., Soley-Guardia, M., Anderson, R. P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 https://CRAN.R-project.org/package=ENMeval +Kass, J., Muscarella, R., Galante, P. J., Bohl, C. L., Pinilla-Buitrago, G. E., Boria, R. A., Soley-Guardia, M., Anderson, R. P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 CRAN -Williams, J. W., & Jackson, S. T. (2007). Novel climates, no-analog communities, and ecological surprises. Frontiers in Ecology and the Environment, 5(9), 475-482. https://doi.org/10.1890/070037 +Williams, J. W., & Jackson, S. T. (2007). Novel climates, no-analog communities, and ecological surprises. Frontiers in Ecology and the Environment, 5(9), 475-482. DOI: 10.1890/070037 diff --git a/inst/shiny/modules/xfer_time.md b/inst/shiny/modules/xfer_time.md index 8496e8edd..06ab41442 100644 --- a/inst/shiny/modules/xfer_time.md +++ b/inst/shiny/modules/xfer_time.md @@ -4,7 +4,7 @@ In simple terms, applying or “transferring” a niche/distributional model to a region or time period different from the ones used to make the model involves making a prediction based on the model and the new values of the predictor variables. In reality, however, researchers should be cognizant of many possible pitfalls, including non-analog conditions (e.g., requiring extrapolation in environmental space; see **Component: Build and Evaluate Niche Model**) and heterogeneity in the effects of species interactions (Fitzpatrick and Hargrove 2009; Anderson 2013). -To predict to different times, datasets describing environmental variables in these times are needed. Global circulation models (GCMs) provide estimates for climate for both the past and future. Various GCMs may have disparate estimates because they are based on different assumptions. Wallace currently uses future climate data for 2050 and 2070 from the IPCC fifth assessment report (AR5) climate projections based on the user’s selection of WorldClim or ecoClimate source variables. The four Representative Concentration Pathways (RCPs) available (RCP2.6, RCP4.5, RCP6.0, and RCP8.5) span a range of climate change scenarios from different greenhouse gas emission outcomes. More information on climate change models can be found here(Hausfather 2019). +To predict to different times, datasets describing environmental variables in these times are needed. Global circulation models (GCMs) provide estimates for climate for both the past and future. Various GCMs may have disparate estimates because they are based on different assumptions. Wallace currently uses future climate data for 2050 and 2070 from the IPCC fifth assessment report (AR5) climate projections based on the user’s selection of WorldClim or ecoClimate source variables. The four Representative Concentration Pathways (RCPs) available (RCP2.6, RCP4.5, RCP6.0, and RCP8.5) span a range of climate change scenarios from different greenhouse gas emission outcomes. More information on climate change models can be found here (Hausfather 2019). NOTE: The IPCC sixth assessment report replaced the use of RCPs with Shared Socioeconomic Pathways (SSPs). The user should note that Wallace uses the terminology associated with AR5, but future versions, as well as other source material, may mention SSPs. @@ -22,13 +22,13 @@ Users may choose a thresholding rule to convert the continuous prediction to a b **REFERENCES** -Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. https://doi.org/10.1111/nyas.12264 +Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. DOI: 10.1111/nyas.12264 -Fitzpatrick, M.C., & Hargrove, W.W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. https://doi.org/10.1007/s10531-009-9584-8 +Fitzpatrick, M.C., & Hargrove, W.W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. DOI: 10.1007/s10531-009-9584-8 -Hausfather, Z. (2019). CMIP6: the next generation of climate models explained. CarbonBrief. https://www.carbonbrief.org/cmip6-the-next-generation-of-climate-models-explained +Hausfather, Z. (2019). CMIP6: the next generation of climate models explained. CarbonBrief. www.carbonbrief.org -Hijmans, R.J., Phillips, S., Leathwick, J., & Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. https://CRAN.R-project.org/package=dismo +Hijmans, R.J., Phillips, S., Leathwick, J., & Elith, J. (2020). dismo: Species Distribution Modeling. R package version 1.3-3. CRAN -Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 https://CRAN.R-project.org/package=ENMeval +Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 CRAN diff --git a/inst/shiny/modules/xfer_user.md b/inst/shiny/modules/xfer_user.md index 33e320fff..ff0c7ecaf 100644 --- a/inst/shiny/modules/xfer_user.md +++ b/inst/shiny/modules/xfer_user.md @@ -16,9 +16,9 @@ Users also may choose a thresholding rule to convert the continuous prediction t **REFERENCES** -Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. https://doi.org/10.1111/nyas.12264 +Anderson, R.P. (2013). A framework for using niche models to estimate impacts of climate change on species distributions. Annals of the New York Academy of Sciences, 1297(1), 8-28. DOI: 10.1111/nyas.12264 -Fitzpatrick, M.C., & Hargrove, W.W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. https://doi.org/10.1007/s10531-009-9584-8 +Fitzpatrick, M.C., & Hargrove, W.W. (2009). The projection of species distribution models and the problem of non-analog climate. Biodiversity and Conservation, 18, 2255. DOI: 10.1007/s10531-009-9584-8 -Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 https://CRAN.R-project.org/package=ENMeval +Kass, J., Muscarella, R., Galante, P.J., Bohl, C.L., Pinilla-Buitrago, G.E., Boria, R.A., Soley-Guardia, M., & Anderson, R.P. (2021). ENMeval: Automated Tuning and Evaluations of Ecological Niche Models. R package version 2.0 CRAN From 0c47e364ab0c3918275690c05fa6e994be008f36 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 14 Apr 2023 11:57:25 -0400 Subject: [PATCH 03/39] add try() to test file --- tests/testthat/test_envs_worldclim.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test_envs_worldclim.R b/tests/testthat/test_envs_worldclim.R index ab946f707..ea50ca6ae 100755 --- a/tests/testthat/test_envs_worldclim.R +++ b/tests/testthat/test_envs_worldclim.R @@ -9,7 +9,7 @@ bcRes <- 10 # (10 arcmin) envar <- c('bio05', 'bio06', 'bio13', 'bio14') ### run function -arcmin10 <- envs_worldclim(bcRes, bcSel = envar) +arcmin10 <- try(envs_worldclim(bcRes, bcSel = envar), silent = TRUE) ### test if the error messages appear when they are supposed to From d218ecf18aff1e2032a5546a98c3326d9f088ed6 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 14 Apr 2023 12:16:23 -0400 Subject: [PATCH 04/39] [2.0.5] try(), m to km, fixed gt ref links --- DESCRIPTION | 4 ++-- NEWS.md | 6 ++++++ README.md | 4 ++-- inst/shiny/Rmd/text_about.Rmd | 2 +- inst/shiny/Rmd/text_intro_tab.Rmd | 2 +- inst/shiny/Rmd/userReport_intro.Rmd | 2 +- vignettes/tutorial-v2.Rmd | 4 ++-- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 3ffa25f69..2a066092d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wallace -Version: 2.0.4 -Date: 2023-03-11 +Version: 2.0.5 +Date: 2023-04-14 Title: A Modular Platform for Reproducible Modeling of Species Niches and Distributions Description: The 'shiny' application Wallace is a modular platform for diff --git a/NEWS.md b/NEWS.md index e0abc219a..4778f5233 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +wallace 2.0.5 +============= +- added try() to test_envs_worldclim.R +- fixed broken links in guidance texts refs +- fixed typo in thinOccs documentation + wallace 2.0.4 ============= - Added Spanish translation of vignette diff --git a/README.md b/README.md index 76677e6c5..515d5548b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![R-CMD-check](https://github.com/wallaceEcoMod/wallace/workflows/R-CMD-check/badge.svg)](https://github.com/wallaceEcoMod/wallace/actions) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![CRAN version](http://www.r-pkg.org/badges/version/wallace)](https://CRAN.R-project.org/package=wallace) [![downloads](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange)](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange) -# Wallace (v2.0.4) +# Wallace (v2.0.5) *Wallace* is a modular platform for reproducible modeling of species niches and distributions, written in R. The application guides users through a complete analysis, from the acquisition of data to visualizing model predictions on an interactive map, thus bundling complex workflows into a single, streamlined interface. @@ -27,7 +27,7 @@ run_wallace() Please make sure you have installed the latest versions of both R (Mac OS, Windows) and RStudio (Mac OS / Windows: choose the free version). #### How to run Maxent with maxent.jar -*Wallace* v2.0.4 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. +*Wallace* v2.0.5 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. ### Potential Issues diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index f837b7c9c..cd0ca81ba 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -7,7 +7,7 @@ output: html_document logo -Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.0.4) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. +Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.0.5) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. The application is written in `R` with the web app development package `shiny`. Please find the stable version of *Wallace* on CRAN, and the development version on Github. We also maintain a *Wallace* website that has some basic info, links, and will be updated with tutorial materials in the near future. diff --git a/inst/shiny/Rmd/text_intro_tab.Rmd b/inst/shiny/Rmd/text_intro_tab.Rmd index 3a99fc192..dc1540258 100644 --- a/inst/shiny/Rmd/text_intro_tab.Rmd +++ b/inst/shiny/Rmd/text_intro_tab.Rmd @@ -5,7 +5,7 @@ output: html_document #### WORKFLOW -*Wallace* (v2.0.4) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. +*Wallace* (v2.0.5) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. **Components:** diff --git a/inst/shiny/Rmd/userReport_intro.Rmd b/inst/shiny/Rmd/userReport_intro.Rmd index bb1efc45d..981552e01 100644 --- a/inst/shiny/Rmd/userReport_intro.Rmd +++ b/inst/shiny/Rmd/userReport_intro.Rmd @@ -10,7 +10,7 @@ knit_engines$set(asis = function(options) { knitr::opts_chunk$set(message = FALSE, warning = FALSE, eval = FALSE) ``` -Please find below the R code history from your *Wallace* v2.0.4 session. +Please find below the R code history from your *Wallace* v2.0.5 session. You can reproduce your session results by running this R Markdown file in RStudio. diff --git a/vignettes/tutorial-v2.Rmd b/vignettes/tutorial-v2.Rmd index 17f07c79d..69c3ae79b 100644 --- a/vignettes/tutorial-v2.Rmd +++ b/vignettes/tutorial-v2.Rmd @@ -49,7 +49,7 @@ If you use *Wallace* in your teaching, we would like to hear about your experien For `wallace` to work, you should be using R version 3.5.0 or later. Download for Windows or Mac. -To install and load *Wallace v2.0.4*, open either the `R` GUI or RStudio and run the code below. It's the only code you'll have to run to use `wallace`. +To install and load *Wallace v2.0.5*, open either the `R` GUI or RStudio and run the code below. It's the only code you'll have to run to use `wallace`. ```{r, eval = FALSE, echo = TRUE} # Install Wallace from CRAN @@ -103,7 +103,7 @@ knitr::include_graphics("vignette_img/orientation_2.png") (**2**) This is the toolbar with all the user interface controls, such as buttons, text inputs, etc. You can see that the module *Query Database (Present)* is currently selected. You'll see that two other modules exist for this component: *Query Database (Paleo)* and *User-specified*. This last module lets you upload your own occurrence data. Try choosing it instead and notice that the toolbar changes, then click back to *Query Database (Present)*.\ Both the **Component** and *Module* have question mark buttons (?) next to the title text. Clicking these will link to the respective guidance texts.\ Within this toolbar, you can find the module name and the `R` packages it uses (**2a**), as well as the control panel for the selected module (**2b**). Modules can be contributed by other researchers and the developers; CRAN links and documentation are at the bottom.\ -(**3**) The right side is the visualization space. Any functions performed will trigger a message in the log window (**3a**). This window will also display any error messages. *Wallace v2.0.4* now allows the user to load multiple species. If multiple species are loaded, toggle and select between species using the species drop-down menu (**3b**).\ +(**3**) The right side is the visualization space. Any functions performed will trigger a message in the log window (**3a**). This window will also display any error messages. *Wallace v2.0.5* now allows the user to load multiple species. If multiple species are loaded, toggle and select between species using the species drop-down menu (**3b**).\ The visualization space includes several tabs (**3c**), including an interactive map, occurrence records table, results window, model and component guidance text windows, and a tab for saving outputs and the current session.\ At this stage of the analysis, no results exist, and you have no data yet for the table, but you can view the **Component Guidance** and *Module Guidance* text now. This text was written by the developers to prepare users for each component and module *theoretically* (why we should use the tools) and *methodologically* (what the tools do). The guidance text also references scientific papers from the literature for more detailed reading. Please get into the habit of consulting these before undertaking analyses---and discussing them with your peers—-as this should give you a more solid foundation for moving forward.\ From 50dfb38a804d9b9a49018be428b3a6e86c4ea679 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 14 Apr 2023 17:31:27 -0400 Subject: [PATCH 05/39] added skip_if() --- tests/testthat/test_envs_worldclim.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/testthat/test_envs_worldclim.R b/tests/testthat/test_envs_worldclim.R index ea50ca6ae..cee97849d 100755 --- a/tests/testthat/test_envs_worldclim.R +++ b/tests/testthat/test_envs_worldclim.R @@ -14,6 +14,8 @@ arcmin10 <- try(envs_worldclim(bcRes, bcSel = envar), silent = TRUE) ### test if the error messages appear when they are supposed to test_that("error checks", { + # Skip if cannot download + skip_if(class(arcmin10) == "try-error") # the user has not selected a raster resolution expect_error(envs_worldclim(bcRes = '', bcSel = envar, doBrick = FALSE), 'Select a raster resolution.') @@ -23,6 +25,8 @@ test_that("error checks", { test_that("output type checks", { # skip on CRAN skip_on_cran() + # Skip if cannot download + skip_if(class(arcmin10) == "try-error") # the output is a RasterBrick expect_is(arcmin10, "RasterStack") # the number of layer is the same as specified in the selected variables list From 51a3ebe10ffd797fc36ad2d2cf8245b014d11b41 Mon Sep 17 00:00:00 2001 From: "Gonzalo E. Pinilla-Buitrago" Date: Fri, 14 Apr 2023 21:35:58 -0400 Subject: [PATCH 06/39] [v2.0.5] + doc & citation URL --- inst/CITATION | 2 +- man/poccs_thinOccs.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/CITATION b/inst/CITATION index ecc7f3156..28ae1be63 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -26,7 +26,7 @@ bibentry( volume = "2023(3)", number = "e06547", pages = "1-9", - url = "https://onlinelibrary.wiley.com/doi/full/10.1111/ecog.06547", + url = "https://onlinelibrary.wiley.com/doi/10.1111/ecog.06547", textVersion = paste("Kass, J.M., Pinilla-Buitrago, G.E., Paz, A., Johnson, B.A., Grisales-Betancur, V., Meenan, S.I., Attali, D., Broennimann, O., Galante, P.J., Maitner, B.S., Owens, H., Varela, S., Aiello-Lammens, Merow, C., M.E., Blair, M.E. & Anderson, R.P. (2023). wallace 2: a shiny app for modeling species niches and distributions redesigned to facilitate expansion via module contributions. Ecography, e06547. ") ) diff --git a/man/poccs_thinOccs.Rd b/man/poccs_thinOccs.Rd index 70d758be6..b653e3e4b 100644 --- a/man/poccs_thinOccs.Rd +++ b/man/poccs_thinOccs.Rd @@ -10,7 +10,7 @@ poccs_thinOccs(occs, thinDist, logger = NULL, spN = NULL) \item{occs}{data frame of cleaned occurrences obtained from component occs: Obtain occurrence data} -\item{thinDist}{distance in meters to be used for thinning. Number must be +\item{thinDist}{distance in kilometers to be used for thinning. Number must be positive.} \item{logger}{Stores all notification messages to be displayed in the Log From 18cfac0bd4cafbc9ad689b9e0a9599011a05a552 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 1 Sep 2023 15:25:20 -0400 Subject: [PATCH 07/39] [v2.0.6] paleo occs removed (`paleobioDB` package currently off CRAN --- DESCRIPTION | 5 +- NAMESPACE | 1 - NEWS.md | 4 + R/occs_paleoDb.R | 242 ++++++++++++++-------------- README.md | 4 +- inst/shiny/Rmd/gtext_occs.Rmd | 1 + inst/shiny/Rmd/text_about.Rmd | 2 +- inst/shiny/Rmd/text_intro_tab.Rmd | 3 +- inst/shiny/Rmd/userReport_intro.Rmd | 2 +- inst/shiny/global.R | 2 +- inst/shiny/modules/occs_paleoDb.R | 236 +++++++++++++-------------- man/occs_paleoDb.Rd | 51 ------ man/poccs_thinOccs.Rd | 2 +- tests/testthat/test_occs_paleoDb.R | 204 +++++++++++------------ vignettes/tutorial-v2-esp.Rmd | 1 + vignettes/tutorial-v2.Rmd | 5 +- 16 files changed, 359 insertions(+), 406 deletions(-) delete mode 100644 man/occs_paleoDb.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 2a066092d..f8bea7a6f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wallace -Version: 2.0.5 -Date: 2023-04-14 +Version: 2.0.6 +Date: 2023-09-01 Title: A Modular Platform for Reproducible Modeling of Species Niches and Distributions Description: The 'shiny' application Wallace is a modular platform for @@ -66,7 +66,6 @@ Suggests: mapview, maxnet, occCite, - paleobioDB, rangeModelMetadata, raster, rgbif (>= 3.3.0), diff --git a/NAMESPACE b/NAMESPACE index 4f901f14e..27b427c11 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,7 +16,6 @@ export(hlSpp) export(model_bioclim) export(model_maxent) export(mxNonzeroCoefs) -export(occs_paleoDb) export(occs_queryDb) export(occs_userOccs) export(part_partitionOccs) diff --git a/NEWS.md b/NEWS.md index 4778f5233..c81b74a13 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +wallace 2.0.6 +============= +- Removed `paleobioDB` (package off CRAN) + wallace 2.0.5 ============= - added try() to test_envs_worldclim.R diff --git a/R/occs_paleoDb.R b/R/occs_paleoDb.R index 91975915a..bc9ab478e 100644 --- a/R/occs_paleoDb.R +++ b/R/occs_paleoDb.R @@ -1,124 +1,124 @@ -#' @title `occs_paleoDb` query paleobioDB database -#' @description -#' query paleobioDB database and returns the complete list of data, data with -#' coordinates, and data with no duplicates +#' #' @title `occs_paleoDb` query paleobioDB database +#' #' @description +#' #' query paleobioDB database and returns the complete list of data, data with +#' #' coordinates, and data with no duplicates +#' #' +#' #' @details +#' #' This function is called by the module occs_queryDb to query the paleobioDB +#' #' database for species occurrence records in the Holocene. It removes +#' #' records with duplicate coordinates, and selects some columns with fields +#' #' appropriate to studies in biogeography. +#' #' +#' #' @param spName character. Species name. For paleobioDb it returns records +#' #' associated with the specified taxonomic name, including any synonyms. +#' #' @param occNum integer maximum number of records. +#' #' @param timeInterval character currently a single timeInterval is allowed: +#' #' "Holocene" (Holocene). +#' #' @param logger Stores all notification messages to be displayed in the +#' #' Log Window of Wallace GUI. Insert the logger reactive list here for +#' #' running in shiny, otherwise leave the default NULL +#' #' @return A list of 2 dataframes. First dataframe is the original downloaded +#' #' dataset, second dataframe without duplicates and with appropriate fields +#' #' for analyses. +#' #' @author Jamie Kass +#' #' @author Gonzalo E. Pinilla-Buitrago +#' #' @author Sara Varela +#' #' @examples +#' #' \dontrun{ +#' #' spName <- "Didelphis virginiana" +#' #' occNum <- 100 +#' #' timeInterval <- "Holocene" +#' #' occsPaleo <- occs_paleoDb(spName, occNum, timeInterval) +#' #' } +#' #' @export #' -#' @details -#' This function is called by the module occs_queryDb to query the paleobioDB -#' database for species occurrence records in the Holocene. It removes -#' records with duplicate coordinates, and selects some columns with fields -#' appropriate to studies in biogeography. +#' occs_paleoDb <- function(spName, occNum, timeInterval, logger = NULL) { +#' if (!requireNamespace("paleobioDB", quietly = TRUE)) { +#' logger %>% +#' writeLog( +#' type = "warning", +#' "This module is available if you install the 'paleobioDB' package ", +#' "(which is a suggested package for Wallace, not a required dependency). If you ", +#' "want to install it, close Wallace and run the following line in the ", +#' "R Console: ", em("install.packages('paleobioDB')") +#' ) +#' return() +#' } +#' spName <- trimws(spName) +#' # figure out how many separate names (components of scientific name) were entered +#' nameSplit <- length(unlist(strsplit(spName, " "))) +#' # if two names not entered, throw error and return +#' if (nameSplit != 2) { +#' logger %>% writeLog(type = 'error', +#' 'Please input both genus and species names of ONE species.') +#' return() +#' } +#' spName <- paste0(toupper(substring(spName, 1, 1)), +#' substring(spName, 2, nchar(spName))) +#' smartProgress(logger, message = paste0("Querying paleobioDB ..."), { +#' occsOrig <- try(paleobioDB::pbdb_occurrences(taxon_name = spName, +#' limit = occNum, +#' interval = timeInterval, +#' vocab = 'pbdb', +#' show = c("coords", "bin", "loc")), +#' silent = TRUE) +#' }) #' -#' @param spName character. Species name. For paleobioDb it returns records -#' associated with the specified taxonomic name, including any synonyms. -#' @param occNum integer maximum number of records. -#' @param timeInterval character currently a single timeInterval is allowed: -#' "Holocene" (Holocene). -#' @param logger Stores all notification messages to be displayed in the -#' Log Window of Wallace GUI. Insert the logger reactive list here for -#' running in shiny, otherwise leave the default NULL -#' @return A list of 2 dataframes. First dataframe is the original downloaded -#' dataset, second dataframe without duplicates and with appropriate fields -#' for analyses. -#' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago -#' @author Sara Varela -#' @examples -#' \dontrun{ -#' spName <- "Didelphis virginiana" -#' occNum <- 100 -#' timeInterval <- "Holocene" -#' occsPaleo <- occs_paleoDb(spName, occNum, timeInterval) +#' if (inherits(occsOrig, "try-error")) { +#' logger %>% writeLog( +#' type = 'error', +#' hlSpp(hlSpp(fmtSpN(spName))), +#' "No records found, please check the spelling.") +#' return() +#' } +#' +#' occsOrig <- dplyr::as_tibble(occsOrig) +#' occsOrig$lng <- as.numeric(occsOrig$lng) +#' occsOrig$lat <- as.numeric(occsOrig$lat) +#' # get total number of records found in database +#' totRows <- nrow(occsOrig) +#' # extract occurrence tibble +#' names(occsOrig)[names(occsOrig) == "lng"] <- "longitude" +#' names(occsOrig)[names(occsOrig) == "lat"] <- "latitude" +#' names(occsOrig)[names(occsOrig) == "cc"] <- "country" +#' occsOrig$taxon_name <- as.character(occsOrig$taxon_name) +#' names(occsOrig)[names(occsOrig) == "taxon_name"] <- "scientific_name" +#' +#' # make new column for original ID +#' occsOrig$occID <- 1:nrow(occsOrig) +#' +#' # subset to just records with latitude and longitude +#' # all plaeobioDB recors have coords, so this warning is commented until future database +#' # occsXY <- occsOrig[!is.na(occsOrig$longitude) & !is.na(occsOrig$latitude),] +#' # if (nrow(occsXY) == 0) { +#' # logger %>% writeLog( +#' # type = 'warning', +#' # hlSpp(spName), "No records with coordinates found in paleobioDB.") +#' # } +#' occsXY <- occsOrig +#' +#' dups <- duplicated(occsXY[,c('longitude','latitude')]) +#' occs <- occsXY[!dups, ] +#' +#' # subset by key columns and make id and popup columns +#' cols <- c("occID", "scientific_name", "longitude", "latitude", +#' # "early_interval", "late_interval", +#' "country", "collection_no", "record_type", +#' "early_age", "late_age") +#' occs <- occs %>% dplyr::select(dplyr::one_of(cols)) %>% +#' # make new column for leaflet marker popup content +#' dplyr::mutate(pop = unlist(apply(occs, 1, popUpContent))) %>% +#' dplyr::arrange(dplyr::across(cols)) +#' occs$early_age <- as.numeric(occs$early_age) +#' occs$late_age <- as.numeric(occs$late_age) +#' noCoordsRem <- nrow(occsOrig) - nrow(occsXY) +#' +#' dupsRem <- nrow(occsXY) - nrow(occs) +#' logger %>% writeLog( +#' hlSpp(fmtSpN(spName)), +#' 'Total paleobioDb records returned [', nrow(occsOrig), '] (limit ', occNum, +#' '). Records without coordinates removed [', +#' noCoordsRem, ']. Duplicated records removed [', dupsRem, +#' ']. Remaining records [', nrow(occs), '].') +#' return(list(orig = occsOrig, cleaned = as.data.frame(occs))) #' } -#' @export - -occs_paleoDb <- function(spName, occNum, timeInterval, logger = NULL) { - if (!requireNamespace("paleobioDB", quietly = TRUE)) { - logger %>% - writeLog( - type = "warning", - "This module is available if you install the 'paleobioDB' package ", - "(which is a suggested package for Wallace, not a required dependency). If you ", - "want to install it, close Wallace and run the following line in the ", - "R Console: ", em("install.packages('paleobioDB')") - ) - return() - } - spName <- trimws(spName) - # figure out how many separate names (components of scientific name) were entered - nameSplit <- length(unlist(strsplit(spName, " "))) - # if two names not entered, throw error and return - if (nameSplit != 2) { - logger %>% writeLog(type = 'error', - 'Please input both genus and species names of ONE species.') - return() - } - spName <- paste0(toupper(substring(spName, 1, 1)), - substring(spName, 2, nchar(spName))) - smartProgress(logger, message = paste0("Querying paleobioDB ..."), { - occsOrig <- try(paleobioDB::pbdb_occurrences(taxon_name = spName, - limit = occNum, - interval = timeInterval, - vocab = 'pbdb', - show = c("coords", "bin", "loc")), - silent = TRUE) - }) - - if (inherits(occsOrig, "try-error")) { - logger %>% writeLog( - type = 'error', - hlSpp(hlSpp(fmtSpN(spName))), - "No records found, please check the spelling.") - return() - } - - occsOrig <- dplyr::as_tibble(occsOrig) - occsOrig$lng <- as.numeric(occsOrig$lng) - occsOrig$lat <- as.numeric(occsOrig$lat) - # get total number of records found in database - totRows <- nrow(occsOrig) - # extract occurrence tibble - names(occsOrig)[names(occsOrig) == "lng"] <- "longitude" - names(occsOrig)[names(occsOrig) == "lat"] <- "latitude" - names(occsOrig)[names(occsOrig) == "cc"] <- "country" - occsOrig$taxon_name <- as.character(occsOrig$taxon_name) - names(occsOrig)[names(occsOrig) == "taxon_name"] <- "scientific_name" - - # make new column for original ID - occsOrig$occID <- 1:nrow(occsOrig) - - # subset to just records with latitude and longitude - # all plaeobioDB recors have coords, so this warning is commented until future database - # occsXY <- occsOrig[!is.na(occsOrig$longitude) & !is.na(occsOrig$latitude),] - # if (nrow(occsXY) == 0) { - # logger %>% writeLog( - # type = 'warning', - # hlSpp(spName), "No records with coordinates found in paleobioDB.") - # } - occsXY <- occsOrig - - dups <- duplicated(occsXY[,c('longitude','latitude')]) - occs <- occsXY[!dups, ] - - # subset by key columns and make id and popup columns - cols <- c("occID", "scientific_name", "longitude", "latitude", - # "early_interval", "late_interval", - "country", "collection_no", "record_type", - "early_age", "late_age") - occs <- occs %>% dplyr::select(dplyr::one_of(cols)) %>% - # make new column for leaflet marker popup content - dplyr::mutate(pop = unlist(apply(occs, 1, popUpContent))) %>% - dplyr::arrange(dplyr::across(cols)) - occs$early_age <- as.numeric(occs$early_age) - occs$late_age <- as.numeric(occs$late_age) - noCoordsRem <- nrow(occsOrig) - nrow(occsXY) - - dupsRem <- nrow(occsXY) - nrow(occs) - logger %>% writeLog( - hlSpp(fmtSpN(spName)), - 'Total paleobioDb records returned [', nrow(occsOrig), '] (limit ', occNum, - '). Records without coordinates removed [', - noCoordsRem, ']. Duplicated records removed [', dupsRem, - ']. Remaining records [', nrow(occs), '].') - return(list(orig = occsOrig, cleaned = as.data.frame(occs))) -} diff --git a/README.md b/README.md index 515d5548b..507c95c0c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![R-CMD-check](https://github.com/wallaceEcoMod/wallace/workflows/R-CMD-check/badge.svg)](https://github.com/wallaceEcoMod/wallace/actions) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![CRAN version](http://www.r-pkg.org/badges/version/wallace)](https://CRAN.R-project.org/package=wallace) [![downloads](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange)](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange) -# Wallace (v2.0.5) +# Wallace (v2.0.6) *Wallace* is a modular platform for reproducible modeling of species niches and distributions, written in R. The application guides users through a complete analysis, from the acquisition of data to visualizing model predictions on an interactive map, thus bundling complex workflows into a single, streamlined interface. @@ -27,7 +27,7 @@ run_wallace() Please make sure you have installed the latest versions of both R (Mac OS, Windows) and RStudio (Mac OS / Windows: choose the free version). #### How to run Maxent with maxent.jar -*Wallace* v2.0.5 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. +*Wallace* v2.0.6 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. ### Potential Issues diff --git a/inst/shiny/Rmd/gtext_occs.Rmd b/inst/shiny/Rmd/gtext_occs.Rmd index 8f5fdab25..4d2eff15e 100644 --- a/inst/shiny/Rmd/gtext_occs.Rmd +++ b/inst/shiny/Rmd/gtext_occs.Rmd @@ -11,6 +11,7 @@ Niche/distributional modeling analyses require georeferenced occurrence records or 3) upload their own dataset (Module: *User-specified Occurrences*). Unlike previous versions of *Wallace*, multiple species now can be uploaded in the same session. +*Note: As of 01 September 2023, Module: Query Database [Paleo] will be temporarily unavailable.* **REFERENCES** diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index cd0ca81ba..01d0c99b6 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -7,7 +7,7 @@ output: html_document logo -Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.0.5) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. +Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.0.6) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. The application is written in `R` with the web app development package `shiny`. Please find the stable version of *Wallace* on CRAN, and the development version on Github. We also maintain a *Wallace* website that has some basic info, links, and will be updated with tutorial materials in the near future. diff --git a/inst/shiny/Rmd/text_intro_tab.Rmd b/inst/shiny/Rmd/text_intro_tab.Rmd index dc1540258..c14c48f03 100644 --- a/inst/shiny/Rmd/text_intro_tab.Rmd +++ b/inst/shiny/Rmd/text_intro_tab.Rmd @@ -5,13 +5,12 @@ output: html_document #### WORKFLOW -*Wallace* (v2.0.5) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. +*Wallace* (v2.0.6) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. **Components:** **1.** *Obtain Occurrence Data* - Query Present Database -- Query Paleo Database - User-specified Occurrences **2.** *Obtain Environmental Data* diff --git a/inst/shiny/Rmd/userReport_intro.Rmd b/inst/shiny/Rmd/userReport_intro.Rmd index 981552e01..aa0c4fab4 100644 --- a/inst/shiny/Rmd/userReport_intro.Rmd +++ b/inst/shiny/Rmd/userReport_intro.Rmd @@ -10,7 +10,7 @@ knit_engines$set(asis = function(options) { knitr::opts_chunk$set(message = FALSE, warning = FALSE, eval = FALSE) ``` -Please find below the R code history from your *Wallace* v2.0.5 session. +Please find below the R code history from your *Wallace* v2.0.6 session. You can reproduce your session results by running this R Markdown file in RStudio. diff --git a/inst/shiny/global.R b/inst/shiny/global.R index 9bb337137..6b1a9b884 100644 --- a/inst/shiny/global.R +++ b/inst/shiny/global.R @@ -28,7 +28,7 @@ COMPONENT_MODULES <- list() # Load all Wallace base modules base_module_configs <- c( "modules/occs_queryDb.yml", - "modules/occs_paleoDb.yml", + # "modules/occs_paleoDb.yml", "modules/occs_userOccs.yml", "modules/envs_worldclim.yml", "modules/envs_ecoclimate.yml", diff --git a/inst/shiny/modules/occs_paleoDb.R b/inst/shiny/modules/occs_paleoDb.R index 25c8b372f..9bc02a0ce 100644 --- a/inst/shiny/modules/occs_paleoDb.R +++ b/inst/shiny/modules/occs_paleoDb.R @@ -1,118 +1,118 @@ -occs_paleoDb_module_ui <- function(id) { - ns <- shiny::NS(id) - tagList( - shinyWidgets::pickerInput( - ns("timeInterval"), - label = "Select interval", - choices = setNames(as.list(c('Quaternary', 'Holocene', 'Pleistocene', - 'Late Pleistocene', 'Middle Pleistocene', - 'Calabrian', 'Gelasian')), - c('Quaternary [0 - 2.588]', - '-- Holocene [0 - 0.0117]', - '-- Pleistocene [0.0117 - 2.588]', - '---- Late Pleistocene [0.0117 - 0.126]', - '---- Middle Pleistocene [0.126 - 0.781]', - '---- Calabrian [0.781 - 1.806]', - '---- Gelasian [1.806 - 2.588]')), - multiple = FALSE), - tags$div(title = 'Examples: Canis lupus, Crocuta crocuta', - textInput(ns("spNamePB"), label = "Enter species scientific name", - placeholder = 'format: Genus species')), - tags$div(title = paste0('Maximum number of occurrences recovered from', - ' databases. Downloaded records are not sorted', - ' randomly: rows are always consistent between', - ' downloads.'), - numericInput(ns("occsNumPB"), "Set maximum number of occurrences", - value = 0, min = 0, max = 500)), - actionButton(ns("goPaleoDbOccs"), "Query Database") - ) -} - -occs_paleoDb_module_server <- function(input, output, session, common) { - logger <- common$logger - spp <- common$spp - - observeEvent(input$goPaleoDbOccs, { - # WARNING #### - if (input$occsNumPB < 1) { - logger %>% writeLog(type = 'warning', "Enter a non-zero number of ocurrences.") - return() - } - - # FUNCTION CALL #### - occsTbls <- occs_paleoDb(input$spNamePB, input$occsNumPB, input$timeInterval, - logger) - - req(occsTbls) - - # LOAD INTO SPP #### - occsOrig <- occsTbls$orig - occs <- occsTbls$cleaned - sp <- fmtSpN(input$spNamePB) - sp <- paste0(toupper(substring(sp, 1, 1)), substring(sp, 2, nchar(sp))) - # if species name is already in list, overwrite it - if (!is.null(spp[[sp]])) spp[[sp]] <- NULL - # add two copies of occs dataset -- "occs" will be altered during session, - # while "occsOrig" will be preserved in this state - # rmm is the range model metadata object - spp[[sp]] <- list(occs = occs, - occData = list(occsOrig = occsOrig, - occsCleaned = occs), - rmm = rangeModelMetadata::rmmTemplate(), - rmd = list()) - - # REFERENCES #### - knitcitations::citep(citation("paleobioDB")) - - # METADATA #### - spp[[sp]]$rmm$data$occurrence$taxon <- sp - spp[[sp]]$rmm$data$occurrence$dataType <- "presence only" - spp[[sp]]$rmm$data$occurrence$presenceSampleSize <- nrow(occs) - spp[[sp]]$rmm$data$occurrence$yearMin <- paste(min(occs$late_age), "mya") - spp[[sp]]$rmm$data$occurrence$yearMax <- paste(max(occs$early_age), "mya") - spp[[sp]]$rmm$code$wallace$occsNum <- input$occsNumPB - spp[[sp]]$rmm$code$wallace$occsRemoved <- nrow(occsOrig) - nrow(occs) - spp[[sp]]$rmm$data$occurrence$sources <- "paleobioDb" - spp[[sp]]$rmm$code$wallace$timeInterval <- input$timeInterval - - common$update_component(tab = "Map") - }) - - return(list( - save = function() { - list( - spNamePB = input$spNamePB, - occsNumPB = input$occsNumPB, - timeInterval = input$timeInterval - ) - }, - load = function(state) { - updateTextInput(session, "spNamePB", value = state$spNamePB) - updateNumericInput(session, "occsNumPB", value = state$occsNumPB) - shinyWidgets::updatePickerInput(session, "timeInterval", - selected = input$timeInterval) - } - )) - -} - -occs_paleoDb_module_map <- function(map, common) { - spp <- common$spp - curSp <- common$curSp - occs <- spp[[curSp()]]$occData$occsCleaned - map %>% clearAll() %>% - addCircleMarkers(data = occs, lat = ~latitude, lng = ~longitude, - radius = 5, color = 'red', fill = TRUE, fillColor = "red", - fillOpacity = 0.2, weight = 2, popup = ~pop) %>% - zoom2Occs(occs) -} - -occs_paleoDb_module_rmd <- function(species) { - # Variables used in the module's Rmd code - list( - occs_paleoDb_knit = species$rmm$data$occurrence$sources == "paleobioDb", - occsNumPB_rmd = species$rmm$code$wallace$occsNum, - timeInterval_rmd = species$rmm$code$wallace$timeInterval - ) -} - +# occs_paleoDb_module_ui <- function(id) { +# ns <- shiny::NS(id) +# tagList( +# shinyWidgets::pickerInput( +# ns("timeInterval"), +# label = "Select interval", +# choices = setNames(as.list(c('Quaternary', 'Holocene', 'Pleistocene', +# 'Late Pleistocene', 'Middle Pleistocene', +# 'Calabrian', 'Gelasian')), +# c('Quaternary [0 - 2.588]', +# '-- Holocene [0 - 0.0117]', +# '-- Pleistocene [0.0117 - 2.588]', +# '---- Late Pleistocene [0.0117 - 0.126]', +# '---- Middle Pleistocene [0.126 - 0.781]', +# '---- Calabrian [0.781 - 1.806]', +# '---- Gelasian [1.806 - 2.588]')), +# multiple = FALSE), +# tags$div(title = 'Examples: Canis lupus, Crocuta crocuta', +# textInput(ns("spNamePB"), label = "Enter species scientific name", +# placeholder = 'format: Genus species')), +# tags$div(title = paste0('Maximum number of occurrences recovered from', +# ' databases. Downloaded records are not sorted', +# ' randomly: rows are always consistent between', +# ' downloads.'), +# numericInput(ns("occsNumPB"), "Set maximum number of occurrences", +# value = 0, min = 0, max = 500)), +# actionButton(ns("goPaleoDbOccs"), "Query Database") +# ) +# } +# +# occs_paleoDb_module_server <- function(input, output, session, common) { +# logger <- common$logger +# spp <- common$spp +# +# observeEvent(input$goPaleoDbOccs, { +# # WARNING #### +# if (input$occsNumPB < 1) { +# logger %>% writeLog(type = 'warning', "Enter a non-zero number of ocurrences.") +# return() +# } +# +# # FUNCTION CALL #### +# occsTbls <- occs_paleoDb(input$spNamePB, input$occsNumPB, input$timeInterval, +# logger) +# +# req(occsTbls) +# +# # LOAD INTO SPP #### +# occsOrig <- occsTbls$orig +# occs <- occsTbls$cleaned +# sp <- fmtSpN(input$spNamePB) +# sp <- paste0(toupper(substring(sp, 1, 1)), substring(sp, 2, nchar(sp))) +# # if species name is already in list, overwrite it +# if (!is.null(spp[[sp]])) spp[[sp]] <- NULL +# # add two copies of occs dataset -- "occs" will be altered during session, +# # while "occsOrig" will be preserved in this state +# # rmm is the range model metadata object +# spp[[sp]] <- list(occs = occs, +# occData = list(occsOrig = occsOrig, +# occsCleaned = occs), +# rmm = rangeModelMetadata::rmmTemplate(), +# rmd = list()) +# +# # REFERENCES #### +# knitcitations::citep(citation("paleobioDB")) +# +# # METADATA #### +# spp[[sp]]$rmm$data$occurrence$taxon <- sp +# spp[[sp]]$rmm$data$occurrence$dataType <- "presence only" +# spp[[sp]]$rmm$data$occurrence$presenceSampleSize <- nrow(occs) +# spp[[sp]]$rmm$data$occurrence$yearMin <- paste(min(occs$late_age), "mya") +# spp[[sp]]$rmm$data$occurrence$yearMax <- paste(max(occs$early_age), "mya") +# spp[[sp]]$rmm$code$wallace$occsNum <- input$occsNumPB +# spp[[sp]]$rmm$code$wallace$occsRemoved <- nrow(occsOrig) - nrow(occs) +# spp[[sp]]$rmm$data$occurrence$sources <- "paleobioDb" +# spp[[sp]]$rmm$code$wallace$timeInterval <- input$timeInterval +# +# common$update_component(tab = "Map") +# }) +# +# return(list( +# save = function() { +# list( +# spNamePB = input$spNamePB, +# occsNumPB = input$occsNumPB, +# timeInterval = input$timeInterval +# ) +# }, +# load = function(state) { +# updateTextInput(session, "spNamePB", value = state$spNamePB) +# updateNumericInput(session, "occsNumPB", value = state$occsNumPB) +# shinyWidgets::updatePickerInput(session, "timeInterval", +# selected = input$timeInterval) +# } +# )) +# +# } +# +# occs_paleoDb_module_map <- function(map, common) { +# spp <- common$spp +# curSp <- common$curSp +# occs <- spp[[curSp()]]$occData$occsCleaned +# map %>% clearAll() %>% +# addCircleMarkers(data = occs, lat = ~latitude, lng = ~longitude, +# radius = 5, color = 'red', fill = TRUE, fillColor = "red", +# fillOpacity = 0.2, weight = 2, popup = ~pop) %>% +# zoom2Occs(occs) +# } +# +# occs_paleoDb_module_rmd <- function(species) { +# # Variables used in the module's Rmd code +# list( +# occs_paleoDb_knit = species$rmm$data$occurrence$sources == "paleobioDb", +# occsNumPB_rmd = species$rmm$code$wallace$occsNum, +# timeInterval_rmd = species$rmm$code$wallace$timeInterval +# ) +# } +# diff --git a/man/occs_paleoDb.Rd b/man/occs_paleoDb.Rd deleted file mode 100644 index 909a41ce2..000000000 --- a/man/occs_paleoDb.Rd +++ /dev/null @@ -1,51 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/occs_paleoDb.R -\name{occs_paleoDb} -\alias{occs_paleoDb} -\title{`occs_paleoDb` query paleobioDB database} -\usage{ -occs_paleoDb(spName, occNum, timeInterval, logger = NULL) -} -\arguments{ -\item{spName}{character. Species name. For paleobioDb it returns records -associated with the specified taxonomic name, including any synonyms.} - -\item{occNum}{integer maximum number of records.} - -\item{timeInterval}{character currently a single timeInterval is allowed: -"Holocene" (Holocene).} - -\item{logger}{Stores all notification messages to be displayed in the -Log Window of Wallace GUI. Insert the logger reactive list here for -running in shiny, otherwise leave the default NULL} -} -\value{ -A list of 2 dataframes. First dataframe is the original downloaded - dataset, second dataframe without duplicates and with appropriate fields - for analyses. -} -\description{ -query paleobioDB database and returns the complete list of data, data with - coordinates, and data with no duplicates -} -\details{ -This function is called by the module occs_queryDb to query the paleobioDB - database for species occurrence records in the Holocene. It removes - records with duplicate coordinates, and selects some columns with fields - appropriate to studies in biogeography. -} -\examples{ -\dontrun{ -spName <- "Didelphis virginiana" -occNum <- 100 -timeInterval <- "Holocene" -occsPaleo <- occs_paleoDb(spName, occNum, timeInterval) -} -} -\author{ -Jamie Kass - -Gonzalo E. Pinilla-Buitrago - -Sara Varela -} diff --git a/man/poccs_thinOccs.Rd b/man/poccs_thinOccs.Rd index 70d758be6..b653e3e4b 100644 --- a/man/poccs_thinOccs.Rd +++ b/man/poccs_thinOccs.Rd @@ -10,7 +10,7 @@ poccs_thinOccs(occs, thinDist, logger = NULL, spN = NULL) \item{occs}{data frame of cleaned occurrences obtained from component occs: Obtain occurrence data} -\item{thinDist}{distance in meters to be used for thinning. Number must be +\item{thinDist}{distance in kilometers to be used for thinning. Number must be positive.} \item{logger}{Stores all notification messages to be displayed in the Log diff --git a/tests/testthat/test_occs_paleoDb.R b/tests/testthat/test_occs_paleoDb.R index 7ab326efc..354f4f18b 100644 --- a/tests/testthat/test_occs_paleoDb.R +++ b/tests/testthat/test_occs_paleoDb.R @@ -1,104 +1,104 @@ -#### COMPONENT occs: Obtain Occurrence Data -#### MODULE: Query Database (Past) -context("paleoDb") - -##Set parameters - -#species name -spName <- "Didelphis virginiana" -spNameError <- "Panthera onc" -genus <- "panthera" -#maximum number of occurrences to download -occNum <- 100 -# For PaleobioDB only Holocene is allowed. -timeInterval <- "Holocene" - -# run function if no Windows -if (Sys.info()['sysname'] != "Windows") { - occsPaleo <- occs_paleoDb(spName, occNum, timeInterval, logger = NULL) -} - - -###Test that errors check - ### test if the error messages appear when they are supposed to -test_that("error checks", { - # paleobioDB failing in Windows - skip_on_os("windows") - # the user doesn't input any species name - expect_error(occs_paleoDb( occNum, occNum, timeInterval), - 'Please input both genus and species names of ONE species.', - fixed = TRUE) - # the user inputs just one name (genus or epithet) - expect_error(occs_paleoDb(spName = genus,occNum, timeInterval), - 'Please input both genus and species names of ONE species.', - fixed = TRUE) - # the species' name has spelling errors, or it is not found in the database - expect_error(occs_paleoDb(spName = spNameError, occNum, timeInterval), - paste0(hlSpp(spNameError), - "No records found, please check the spelling."), - fixed = TRUE) -}) - -###Test of warnings: -##Function has one warning for records without coordinates, this is forbidden by -##the database -##thus making the case impossible. If it was possible it would look like this: -# test_that("warnings checks", { -# # the species is found in the database, but it does not have coordinates (Log & lat) -# expect_warning(occs_paleoDb(spName = "impossible species", occNum = 1, -# timeInterval), -# paste0(hlSpp("impossible species"), -# "No records with coordinates found in paleobioDB."), +# #### COMPONENT occs: Obtain Occurrence Data +# #### MODULE: Query Database (Past) +# context("paleoDb") +# +# ##Set parameters +# +# #species name +# spName <- "Didelphis virginiana" +# spNameError <- "Panthera onc" +# genus <- "panthera" +# #maximum number of occurrences to download +# occNum <- 100 +# # For PaleobioDB only Holocene is allowed. +# timeInterval <- "Holocene" +# +# # run function if no Windows +# if (Sys.info()['sysname'] != "Windows") { +# occsPaleo <- occs_paleoDb(spName, occNum, timeInterval, logger = NULL) +# } +# +# +# ###Test that errors check +# ### test if the error messages appear when they are supposed to +# test_that("error checks", { +# # paleobioDB failing in Windows +# skip_on_os("windows") +# # the user doesn't input any species name +# expect_error(occs_paleoDb( occNum, occNum, timeInterval), +# 'Please input both genus and species names of ONE species.', # fixed = TRUE) +# # the user inputs just one name (genus or epithet) +# expect_error(occs_paleoDb(spName = genus,occNum, timeInterval), +# 'Please input both genus and species names of ONE species.', +# fixed = TRUE) +# # the species' name has spelling errors, or it is not found in the database +# expect_error(occs_paleoDb(spName = spNameError, occNum, timeInterval), +# paste0(hlSpp(spNameError), +# "No records found, please check the spelling."), +# fixed = TRUE) +# }) +# +# ###Test of warnings: +# ##Function has one warning for records without coordinates, this is forbidden by +# ##the database +# ##thus making the case impossible. If it was possible it would look like this: +# # test_that("warnings checks", { +# # # the species is found in the database, but it does not have coordinates (Log & lat) +# # expect_warning(occs_paleoDb(spName = "impossible species", occNum = 1, +# # timeInterval), +# # paste0(hlSpp("impossible species"), +# # "No records with coordinates found in paleobioDB."), +# # fixed = TRUE) +# # }) +# +# # test output features +# test_that("output type checks", { +# # paleobioDB failing in Windows +# skip_on_os("windows") +# # skip on CRAN +# skip_on_cran() +# #output is a list +# expect_is(occsPaleo, "list") +# #List has two elements +# expect_equal(length(occsPaleo), 2) +# }) +# test_that("output data checks", { +# # paleobioDB failing in Windows +# skip_on_os("windows") +# # skip on CRAN +# skip_on_cran() +# # if the original database has records without coordinates OR duplicates: +# if ((TRUE %in% duplicated(occsPaleo$orig[,c('longitude','latitude')]) == TRUE) | +# (NA %in% occsPaleo$orig[,c('longitude','latitude')]) == TRUE){ +# # the cleaned table must have fewer records than the original one +# expect_true((nrow(occsPaleo$orig)) > (nrow(occsPaleo$cleaned))) +# } else { # if not, +# # both tables should have the same number of records +# expect_true((nrow(occsPaleo$orig)) == (nrow(occsPaleo$cleaned))) +# } +# # there are not "NA" values in longitude OR latitude columns in the cleaned table +# expect_false(NA %in% occsPaleo$cleaned$latitude) | +# (NA %in% occsPaleo$cleaned$longitude) +# # there are not duplicate values in longitude AND latitude columns in the cleaned table +# expect_false(TRUE %in% duplicated(occsPaleo$cleaned[, c('longitude','latitude')])) +# # downloaded species corresponds to queried species. T +# expect_match(unique(occsPaleo$cleaned$scientific_name), +# spName, ignore.case = TRUE, all = TRUE) +# }) +# ##Check headers for both original and cleaned tables +# keyPaleoHeaders <- c("occID", "scientific_name", "longitude", "latitude", +# # "early_interval", "late_interval", +# "country", "collection_no", "record_type", +# "early_age", "late_age") +# +# test_that("headers check", { +# # paleobioDB failing in Windows +# skip_on_os("windows") +# # +# expect_false('FALSE' %in% (keyPaleoHeaders %in% names(occsPaleo$orig))) +# # the headers in the cleaned table are the ones specified in the function +# expect_equal(names(occsPaleo$cleaned),c(keyPaleoHeaders,"pop")) # }) - -# test output features -test_that("output type checks", { - # paleobioDB failing in Windows - skip_on_os("windows") - # skip on CRAN - skip_on_cran() - #output is a list - expect_is(occsPaleo, "list") - #List has two elements - expect_equal(length(occsPaleo), 2) -}) -test_that("output data checks", { - # paleobioDB failing in Windows - skip_on_os("windows") - # skip on CRAN - skip_on_cran() - # if the original database has records without coordinates OR duplicates: - if ((TRUE %in% duplicated(occsPaleo$orig[,c('longitude','latitude')]) == TRUE) | - (NA %in% occsPaleo$orig[,c('longitude','latitude')]) == TRUE){ - # the cleaned table must have fewer records than the original one - expect_true((nrow(occsPaleo$orig)) > (nrow(occsPaleo$cleaned))) - } else { # if not, - # both tables should have the same number of records - expect_true((nrow(occsPaleo$orig)) == (nrow(occsPaleo$cleaned))) - } - # there are not "NA" values in longitude OR latitude columns in the cleaned table - expect_false(NA %in% occsPaleo$cleaned$latitude) | - (NA %in% occsPaleo$cleaned$longitude) - # there are not duplicate values in longitude AND latitude columns in the cleaned table - expect_false(TRUE %in% duplicated(occsPaleo$cleaned[, c('longitude','latitude')])) - # downloaded species corresponds to queried species. T - expect_match(unique(occsPaleo$cleaned$scientific_name), - spName, ignore.case = TRUE, all = TRUE) -}) -##Check headers for both original and cleaned tables -keyPaleoHeaders <- c("occID", "scientific_name", "longitude", "latitude", - # "early_interval", "late_interval", - "country", "collection_no", "record_type", - "early_age", "late_age") - -test_that("headers check", { - # paleobioDB failing in Windows - skip_on_os("windows") - # - expect_false('FALSE' %in% (keyPaleoHeaders %in% names(occsPaleo$orig))) - # the headers in the cleaned table are the ones specified in the function - expect_equal(names(occsPaleo$cleaned),c(keyPaleoHeaders,"pop")) -}) - - +# +# diff --git a/vignettes/tutorial-v2-esp.Rmd b/vignettes/tutorial-v2-esp.Rmd index 7ec312d58..351a2c1a0 100644 --- a/vignettes/tutorial-v2-esp.Rmd +++ b/vignettes/tutorial-v2-esp.Rmd @@ -130,6 +130,7 @@ knitr::include_graphics("vignette_img/occs_1.png") ```{r, fig.align = 'center'} knitr::include_graphics("vignette_img/occs_2.png") ``` +*Nota: A partir del 01 September 2023, el módulo Query Database (Paleo) [Consultar base de datos (Paleo)], no estará disponible temporalmente.* Procedemos a obtener datos de ocurrencia. Usaremos ocurrencias del presente (en contraste con los del pasado obtenidos mediante datos fósiles, etc.) y por lo tanto usaremos el módulo: *Query Database (Present)*[Consultar base de datos (presente)]. Hay una selección de bases de datos para escoger, como también una opción para obtener solo las ocurrencias con información sobre la incertidumbre de las coordenadas (esto puede ser útil para filtrar más adelante). Si usted tiene un ID de usuario de GBIF, marcar la casilla "Include Data Source" [Incluir fuente de los datos] le permitirá iniciar sesión con su nombre de usuario y contraseña. Para que esto funcione, debe instalar el paquete de R occCite antes de ejecutar Wallace. Dado que `occCite` es un paquete sugerido, este no será instalado automáticamente como otras dependencias. diff --git a/vignettes/tutorial-v2.Rmd b/vignettes/tutorial-v2.Rmd index 69c3ae79b..94d0275b8 100644 --- a/vignettes/tutorial-v2.Rmd +++ b/vignettes/tutorial-v2.Rmd @@ -49,7 +49,7 @@ If you use *Wallace* in your teaching, we would like to hear about your experien For `wallace` to work, you should be using R version 3.5.0 or later. Download for Windows or Mac. -To install and load *Wallace v2.0.5*, open either the `R` GUI or RStudio and run the code below. It's the only code you'll have to run to use `wallace`. +To install and load *Wallace v2.0.6*, open either the `R` GUI or RStudio and run the code below. It's the only code you'll have to run to use `wallace`. ```{r, eval = FALSE, echo = TRUE} # Install Wallace from CRAN @@ -103,7 +103,7 @@ knitr::include_graphics("vignette_img/orientation_2.png") (**2**) This is the toolbar with all the user interface controls, such as buttons, text inputs, etc. You can see that the module *Query Database (Present)* is currently selected. You'll see that two other modules exist for this component: *Query Database (Paleo)* and *User-specified*. This last module lets you upload your own occurrence data. Try choosing it instead and notice that the toolbar changes, then click back to *Query Database (Present)*.\ Both the **Component** and *Module* have question mark buttons (?) next to the title text. Clicking these will link to the respective guidance texts.\ Within this toolbar, you can find the module name and the `R` packages it uses (**2a**), as well as the control panel for the selected module (**2b**). Modules can be contributed by other researchers and the developers; CRAN links and documentation are at the bottom.\ -(**3**) The right side is the visualization space. Any functions performed will trigger a message in the log window (**3a**). This window will also display any error messages. *Wallace v2.0.5* now allows the user to load multiple species. If multiple species are loaded, toggle and select between species using the species drop-down menu (**3b**).\ +(**3**) The right side is the visualization space. Any functions performed will trigger a message in the log window (**3a**). This window will also display any error messages. *Wallace v2.0* now allows the user to load multiple species. If multiple species are loaded, toggle and select between species using the species drop-down menu (**3b**).\ The visualization space includes several tabs (**3c**), including an interactive map, occurrence records table, results window, model and component guidance text windows, and a tab for saving outputs and the current session.\ At this stage of the analysis, no results exist, and you have no data yet for the table, but you can view the **Component Guidance** and *Module Guidance* text now. This text was written by the developers to prepare users for each component and module *theoretically* (why we should use the tools) and *methodologically* (what the tools do). The guidance text also references scientific papers from the literature for more detailed reading. Please get into the habit of consulting these before undertaking analyses---and discussing them with your peers—-as this should give you a more solid foundation for moving forward.\ @@ -127,6 +127,7 @@ knitr::include_graphics("vignette_img/occs_1.png") ```{r, fig.align = 'center'} knitr::include_graphics("vignette_img/occs_2.png") ``` +*Note: As of 01 September 2023, Module: Query Database [Paleo] will be temporarily unavailable.* Let's proceed to get some occurrence data. We'll be using present occurrences (as opposed to those from the deep past via fossil data, etc.) and therefore use Module: *Query Database (Present)*. There is a selection of databases to choose from, as well as the option to return only those occurrences that contain information on coordinate uncertainty (which can be useful to filter by later). If you have a GBIF User ID, checking the "Include Data Source" box will allow you to log in with your username and password to download a DOI for the dataset. In order for this to work, you will need to install the R-package `occCite` prior to running Wallace. Since `occCite` is a suggested package, it will not install automatically like the other package dependencies. From a9a4f50f1f5b011ed8e59bc62ac521d95246e6ee Mon Sep 17 00:00:00 2001 From: "Gonzalo E. Pinilla-Buitrago" Date: Fri, 1 Sep 2023 15:57:48 -0400 Subject: [PATCH 08/39] changed GEPB email --- DESCRIPTION | 2 +- NEWS.md | 1 + R/envs_ecoClimate.R | 2 +- R/envs_userEnvs.R | 2 +- R/envs_worldclim.R | 2 +- R/model_bioclim.R | 2 +- R/model_maxent.R | 2 +- R/occs_paleoDb.R | 2 +- R/occs_queryDb.R | 2 +- R/occs_userOccs.R | 2 +- R/part_partitionOccs.R | 2 +- R/penvs_bgExtent.R | 2 +- R/penvs_bgMask.R | 2 +- R/penvs_bgSample.R | 2 +- R/penvs_drawBgExtent.R | 2 +- R/penvs_userBgExtent.R | 2 +- R/poccs_removeByID.R | 2 +- R/poccs_selectOccs.R | 2 +- R/poccs_thinOccs.R | 2 +- R/run_wallace.R | 2 +- R/vis_bioclimPlot.R | 2 +- R/xfer_area.R | 2 +- R/xfer_draw.R | 2 +- R/xfer_mess.R | 2 +- R/xfer_time.R | 2 +- R/xfer_userEnvs.R | 2 +- R/xfer_userExtent.R | 2 +- man/envs_ecoClimate.Rd | 2 +- man/envs_userEnvs.Rd | 2 +- man/envs_worldclim.Rd | 2 +- man/model_bioclim.Rd | 2 +- man/model_maxent.Rd | 2 +- man/occs_queryDb.Rd | 2 +- man/occs_userOccs.Rd | 2 +- man/part_partitionOccs.Rd | 2 +- man/penvs_bgExtent.Rd | 2 +- man/penvs_bgMask.Rd | 2 +- man/penvs_bgSample.Rd | 2 +- man/penvs_drawBgExtent.Rd | 2 +- man/penvs_userBgExtent.Rd | 2 +- man/poccs_removeByID.Rd | 2 +- man/poccs_selectOccs.Rd | 2 +- man/poccs_thinOccs.Rd | 2 +- man/run_wallace.Rd | 2 +- man/vis_bioclimPlot.Rd | 2 +- man/xfer_area.Rd | 2 +- man/xfer_draw.Rd | 2 +- man/xfer_mess.Rd | 2 +- man/xfer_time.Rd | 2 +- man/xfer_userEnvs.Rd | 2 +- man/xfer_userExtent.Rd | 2 +- 51 files changed, 51 insertions(+), 50 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f8bea7a6f..c3491af92 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -13,7 +13,7 @@ Description: The 'shiny' application Wallace is a modular platform for website: . Authors@R: c(person("Jamie M.", "Kass", email = "jamie.kass@oist.jp", role = "aut"), - person("Gonzalo E.", "Pinilla-Buitrago", email = "gpinillabuitrago@gradcenter.cuny.edu", role = c("aut", "cre")), + person("Gonzalo E.", "Pinilla-Buitrago", email = "gepinillab@gmail.com", role = c("aut", "cre")), person("Andrea", "Paz", email = "paz.andreita@gmail.com", role = "aut"), person("Bethany A.", "Johnson", email = "bjohnso005@citymail.cuny.edu", role = "aut"), person("Valentina", "Grisales-Betancur", email = "vgrisale@eafit.edu.co", role = "aut"), diff --git a/NEWS.md b/NEWS.md index c81b74a13..1f317979b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ wallace 2.0.6 ============= - Removed `paleobioDB` (package off CRAN) +- Changed Maintainer e-mail wallace 2.0.5 ============= diff --git a/R/envs_ecoClimate.R b/R/envs_ecoClimate.R index 61e3917c0..ad6ad5110 100644 --- a/R/envs_ecoClimate.R +++ b/R/envs_ecoClimate.R @@ -32,7 +32,7 @@ #' #' @author Sara Varela #' @author Jamie M. Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' #' @export #' diff --git a/R/envs_userEnvs.R b/R/envs_userEnvs.R index 44fbc57cd..0d42e7756 100644 --- a/R/envs_userEnvs.R +++ b/R/envs_userEnvs.R @@ -30,7 +30,7 @@ #' provided rasters #' #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @export #' #' diff --git a/R/envs_worldclim.R b/R/envs_worldclim.R index 84b536d48..1914cf086 100644 --- a/R/envs_worldclim.R +++ b/R/envs_worldclim.R @@ -29,7 +29,7 @@ #' worldclim rasters at the requested resolution. #' #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' #' @seealso \code{\link[raster]{getData}} #' diff --git a/R/model_bioclim.R b/R/model_bioclim.R index 3ff630ee8..e3f70d593 100644 --- a/R/model_bioclim.R +++ b/R/model_bioclim.R @@ -39,7 +39,7 @@ #' and a selection of appropriate fields. #' @author Jamie M. Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link[ENMeval]{ENMevaluate}} diff --git a/R/model_maxent.R b/R/model_maxent.R index bc61a651e..9d33c891a 100644 --- a/R/model_maxent.R +++ b/R/model_maxent.R @@ -61,7 +61,7 @@ #' @return Function returns an ENMevaluate object with all the evaluated models #' and a selection of appropriate fields. #' @author Jamie M. Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link[ENMeval]{ENMevaluate}} diff --git a/R/occs_paleoDb.R b/R/occs_paleoDb.R index bc9ab478e..0bfdbd301 100644 --- a/R/occs_paleoDb.R +++ b/R/occs_paleoDb.R @@ -21,7 +21,7 @@ #' #' dataset, second dataframe without duplicates and with appropriate fields #' #' for analyses. #' #' @author Jamie Kass -#' #' @author Gonzalo E. Pinilla-Buitrago +#' #' @author Gonzalo E. Pinilla-Buitrago #' #' @author Sara Varela #' #' @examples #' #' \dontrun{ diff --git a/R/occs_queryDb.R b/R/occs_queryDb.R index 2645baca7..d04823066 100644 --- a/R/occs_queryDb.R +++ b/R/occs_queryDb.R @@ -32,7 +32,7 @@ #' individual species list with appropriate fields for analysis #' #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @author Hannah Owens #' @author Andrea Paz #' @examples diff --git a/R/occs_userOccs.R b/R/occs_userOccs.R index 23a0702d6..9fbeac9e3 100644 --- a/R/occs_userOccs.R +++ b/R/occs_userOccs.R @@ -26,7 +26,7 @@ #' @return List of lists. One list per species with occurrence records. Each #' individual species list with appropriate fields for analysis #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @importFrom rlang .data #' @export diff --git a/R/part_partitionOccs.R b/R/part_partitionOccs.R index dece2e5a0..7dcdd433c 100644 --- a/R/part_partitionOccs.R +++ b/R/part_partitionOccs.R @@ -50,7 +50,7 @@ #' @return A list of two vectors containing group assignments for occurrences #' (occs.grp) and background points (bg.grp). #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @author Andrea Paz # @note #' @seealso \code{\link[ENMeval]{partitions}} diff --git a/R/penvs_bgExtent.R b/R/penvs_bgExtent.R index ca0f8b5ff..2d4e23ac4 100644 --- a/R/penvs_bgExtent.R +++ b/R/penvs_bgExtent.R @@ -28,7 +28,7 @@ #' #' @return A SpatialPolygonsDataFrame object that contains all occurrences from occs #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link{penvs_userBgExtent}}, \code{\link{penvs_drawBgExtent}}, diff --git a/R/penvs_bgMask.R b/R/penvs_bgMask.R index df7b704b2..7e5e30035 100644 --- a/R/penvs_bgMask.R +++ b/R/penvs_bgMask.R @@ -39,7 +39,7 @@ #' @return A RasterStack or a RasterBrick of environmental layers cropped and #' masked to match the provided background extent. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @seealso \code{\link{penvs_userBgExtent}}, #' \code{\link{penvs_drawBgExtent}}, \code{\link{penvs_bgExtent}}, #' \code{\link{penvs_bgSample}} diff --git a/R/penvs_bgSample.R b/R/penvs_bgSample.R index 093466709..9eabf18af 100644 --- a/R/penvs_bgSample.R +++ b/R/penvs_bgSample.R @@ -43,7 +43,7 @@ #' Maximum number of points is equal to non NA cells in each layer of the #' reference brick or stack. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @seealso \code{\link{penvs_bgMask}}, \code{\link{penvs_bgExtent}} #' \code{\link{penvs_userBgExtent}}, \code{\link{penvs_drawBgExtent}}, #' \code{\link[dismo]{randomPoints}} diff --git a/R/penvs_drawBgExtent.R b/R/penvs_drawBgExtent.R index 4870b3642..ebd89b34d 100644 --- a/R/penvs_drawBgExtent.R +++ b/R/penvs_drawBgExtent.R @@ -41,7 +41,7 @@ #' include all occurrences. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link{penvs_userBgExtent}}, \code{\link{penvs_bgExtent}}, #' \code{\link{penvs_bgMask}} , \code{\link{penvs_bgSample}} diff --git a/R/penvs_userBgExtent.R b/R/penvs_userBgExtent.R index 26ea7d570..67f857747 100644 --- a/R/penvs_userBgExtent.R +++ b/R/penvs_userBgExtent.R @@ -37,7 +37,7 @@ #' provided shape (+ a buffer is userBgBuf >0). The polygon will be at least #' large enough to contain all occurrences. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @author Andrea Paz # @note diff --git a/R/poccs_removeByID.R b/R/poccs_removeByID.R index 49379fcd7..67fd19671 100644 --- a/R/poccs_removeByID.R +++ b/R/poccs_removeByID.R @@ -27,7 +27,7 @@ #' mantaining all columns from original dataframe for further analyses. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note # @seealso diff --git a/R/poccs_selectOccs.R b/R/poccs_selectOccs.R index bc9f04165..cd50a787c 100644 --- a/R/poccs_selectOccs.R +++ b/R/poccs_selectOccs.R @@ -37,7 +37,7 @@ #' provided polygon and mantaining all columns from original dataframe for #' further analyses. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @export poccs_selectOccs <- function(occs, polySelXY, polySelID = 1, logger = NULL, diff --git a/R/poccs_thinOccs.R b/R/poccs_thinOccs.R index 0e59b16c9..8b1a09b33 100644 --- a/R/poccs_thinOccs.R +++ b/R/poccs_thinOccs.R @@ -29,7 +29,7 @@ #' @return Output is a data frame of thinned occurences (all occurences at a #' distance >thinDist) with the same columns as occs #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @seealso \code{\link[spThin]{thin}} #' @export diff --git a/R/run_wallace.R b/R/run_wallace.R index c56205b35..94520d594 100644 --- a/R/run_wallace.R +++ b/R/run_wallace.R @@ -14,7 +14,7 @@ #' run_wallace() #' } #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @export run_wallace <- function(launch.browser = TRUE, port = getOption("shiny.port")) { app_path <- system.file("shiny", package = "wallace") diff --git a/R/vis_bioclimPlot.R b/R/vis_bioclimPlot.R index fcf4cdd26..e040ef0f5 100644 --- a/R/vis_bioclimPlot.R +++ b/R/vis_bioclimPlot.R @@ -44,7 +44,7 @@ #' are shown as green circles and those outside of the envelope for one ore #' more variables are plotted as orange triangles. #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso #'\code{\link{model_bioclim}} \code{\link[ENMeval]{ENMevaluate}} diff --git a/R/xfer_area.R b/R/xfer_area.R index 16bf50c28..104772d65 100644 --- a/R/xfer_area.R +++ b/R/xfer_area.R @@ -60,7 +60,7 @@ #' the specified output type. #' @author Jamie Kass #' @author Andrea Paz -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link[dismo]{predict}}, \code{\link{xfer_time}} #' \code{\link{xfer_userEnvs}} diff --git a/R/xfer_draw.R b/R/xfer_draw.R index 453185f6b..e4ed133ce 100644 --- a/R/xfer_draw.R +++ b/R/xfer_draw.R @@ -33,7 +33,7 @@ #' specified coordinates (drawn on map). This SpatialPolygonsDataFrame may be #' larger than specified if drawBgBuf > 0. -#' @author Gonzalo Pinilla +#' @author Gonzalo Pinilla # @note #' @seealso \code{\link{xfer_userEnvs}} #' @export diff --git a/R/xfer_mess.R b/R/xfer_mess.R index 157fc2661..d8d033d9b 100644 --- a/R/xfer_mess.R +++ b/R/xfer_mess.R @@ -47,7 +47,7 @@ #' } # @return #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link[dismo]{mess}}, \code{\link{xfer_time}} diff --git a/R/xfer_time.R b/R/xfer_time.R index bbf93874b..16ee0af8c 100644 --- a/R/xfer_time.R +++ b/R/xfer_time.R @@ -71,7 +71,7 @@ #' with the specified output type. #' @author Jamie Kass #' @author Andrea Paz -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @seealso \code{\link[dismo]{predict}}, \code{\link{xfer_time}} #' \code{\link{xfer_userEnvs}} #' @export diff --git a/R/xfer_userEnvs.R b/R/xfer_userEnvs.R index 8639e3a92..7fe6ab583 100644 --- a/R/xfer_userEnvs.R +++ b/R/xfer_userEnvs.R @@ -55,7 +55,7 @@ #' #' @author Jamie Kass #' @author Andrea Paz -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago # @note #' @seealso \code{\link[dismo]{predict}}, \code{\link{xfer_time}} #' \code{\link{xfer_userExtent}} diff --git a/R/xfer_userExtent.R b/R/xfer_userExtent.R index 22e271cbe..86a9d4dc8 100644 --- a/R/xfer_userExtent.R +++ b/R/xfer_userExtent.R @@ -31,7 +31,7 @@ #' @return This function returns a SpatialPolygons object with the user #' provided shape (+ a buffer is userBgBuf >0). #' @author Jamie Kass -#' @author Gonzalo E. Pinilla-Buitrago +#' @author Gonzalo E. Pinilla-Buitrago #' @author Andrea Paz #' @seealso \code{\link{penvs_drawBgExtent}}, \code{\link{penvs_bgExtent}}, #' \code{\link{penvs_bgMask}} , \code{\link{penvs_bgSample}} diff --git a/man/envs_ecoClimate.Rd b/man/envs_ecoClimate.Rd index 9fe841db2..5e1d34479 100644 --- a/man/envs_ecoClimate.Rd +++ b/man/envs_ecoClimate.Rd @@ -49,5 +49,5 @@ Sara Varela Jamie M. Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/envs_userEnvs.Rd b/man/envs_userEnvs.Rd index 23e7c78f0..e5a395f9a 100644 --- a/man/envs_userEnvs.Rd +++ b/man/envs_userEnvs.Rd @@ -45,5 +45,5 @@ userEnvs <- envs_userEnvs(rasPath = pathRast, rasName = nameRast) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/envs_worldclim.Rd b/man/envs_worldclim.Rd index b94c068b2..fcc5e7b10 100644 --- a/man/envs_worldclim.Rd +++ b/man/envs_worldclim.Rd @@ -50,5 +50,5 @@ arcmin10 <- envs_worldclim(bcRes, bcSel = envar) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/model_bioclim.Rd b/man/model_bioclim.Rd index e59963f3b..960fabd7a 100644 --- a/man/model_bioclim.Rd +++ b/man/model_bioclim.Rd @@ -59,5 +59,5 @@ m <- model_bioclim(occs, bg, partblock, envs) \author{ Jamie M. Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/model_maxent.Rd b/man/model_maxent.Rd index 47258591b..6a2e5ac47 100644 --- a/man/model_maxent.Rd +++ b/man/model_maxent.Rd @@ -103,5 +103,5 @@ m <- model_maxent(occs = occs, bg = bg, user.grp = partblock, \author{ Jamie M. Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/occs_queryDb.Rd b/man/occs_queryDb.Rd index aeefc6cb4..8c0cbb675 100644 --- a/man/occs_queryDb.Rd +++ b/man/occs_queryDb.Rd @@ -67,7 +67,7 @@ occs_queryDb(spName = "Bassaricyon alleni", occDb = "gbif", occNum = 10) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago Hannah Owens diff --git a/man/occs_userOccs.Rd b/man/occs_userOccs.Rd index c022f3ed9..9c7303457 100644 --- a/man/occs_userOccs.Rd +++ b/man/occs_userOccs.Rd @@ -45,5 +45,5 @@ user.occs <- occs_userOccs(txtPath, txtName) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/part_partitionOccs.Rd b/man/part_partitionOccs.Rd index 3d22ca7e2..3e311bedd 100644 --- a/man/part_partitionOccs.Rd +++ b/man/part_partitionOccs.Rd @@ -82,7 +82,7 @@ partblock <- part_partitionOccs(occs, bg, method = 'rand', kfold = 4) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago Andrea Paz } diff --git a/man/penvs_bgExtent.Rd b/man/penvs_bgExtent.Rd index 35d6ef583..9cd002e3b 100644 --- a/man/penvs_bgExtent.Rd +++ b/man/penvs_bgExtent.Rd @@ -51,5 +51,5 @@ bgExt <- penvs_bgExtent(occs, bgSel = 'bounding box', bgBuf = 0.5) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/penvs_bgMask.Rd b/man/penvs_bgMask.Rd index ce8a060ae..24bf1664b 100644 --- a/man/penvs_bgMask.Rd +++ b/man/penvs_bgMask.Rd @@ -62,5 +62,5 @@ bgMask <- penvs_bgMask(occs, envs, bgExt) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/penvs_bgSample.Rd b/man/penvs_bgSample.Rd index 37856bb4a..3c2f8b068 100644 --- a/man/penvs_bgSample.Rd +++ b/man/penvs_bgSample.Rd @@ -66,5 +66,5 @@ bgsample <- penvs_bgSample(occs, bgMask, bgPtsNum = 1000) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/penvs_drawBgExtent.Rd b/man/penvs_drawBgExtent.Rd index b1000f621..c57d345ff 100644 --- a/man/penvs_drawBgExtent.Rd +++ b/man/penvs_drawBgExtent.Rd @@ -70,5 +70,5 @@ drawBgBf <- penvs_drawBgExtent(polyExtXY = expertDrawPoly, polyExtID = 1, \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/penvs_userBgExtent.Rd b/man/penvs_userBgExtent.Rd index 22c9a4d64..62128e955 100644 --- a/man/penvs_userBgExtent.Rd +++ b/man/penvs_userBgExtent.Rd @@ -68,7 +68,7 @@ userBgbf <- penvs_userBgExtent(bgShp_path = pathShp, bgShp_name = nameShp, \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago Andrea Paz } diff --git a/man/poccs_removeByID.Rd b/man/poccs_removeByID.Rd index 9be416d0f..c61d4ee79 100644 --- a/man/poccs_removeByID.Rd +++ b/man/poccs_removeByID.Rd @@ -43,5 +43,5 @@ out.ID <- poccs_removeByID(occs, 11) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/poccs_selectOccs.Rd b/man/poccs_selectOccs.Rd index 40c3812ee..96f827a2a 100644 --- a/man/poccs_selectOccs.Rd +++ b/man/poccs_selectOccs.Rd @@ -55,5 +55,5 @@ out.occs <- poccs_selectOccs(occs, polySelXY = expertAddedPoly, \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/poccs_thinOccs.Rd b/man/poccs_thinOccs.Rd index b653e3e4b..7ab1510d7 100644 --- a/man/poccs_thinOccs.Rd +++ b/man/poccs_thinOccs.Rd @@ -48,5 +48,5 @@ out.thin <- poccs_thinOccs(occs = occs, thinDist = 30) \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/run_wallace.Rd b/man/run_wallace.Rd index 4b018d8ea..c73d0b4f1 100644 --- a/man/run_wallace.Rd +++ b/man/run_wallace.Rd @@ -30,5 +30,5 @@ run_wallace() \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/vis_bioclimPlot.Rd b/man/vis_bioclimPlot.Rd index 84f0f3642..8bb4d8f30 100644 --- a/man/vis_bioclimPlot.Rd +++ b/man/vis_bioclimPlot.Rd @@ -63,5 +63,5 @@ bioclimPlot <- vis_bioclimPlot(x = m@models$bioclim, \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/xfer_area.Rd b/man/xfer_area.Rd index 027b6ac7e..476f9429f 100644 --- a/man/xfer_area.Rd +++ b/man/xfer_area.Rd @@ -98,5 +98,5 @@ Jamie Kass Andrea Paz -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/xfer_draw.Rd b/man/xfer_draw.Rd index 978e179e0..1981436ca 100644 --- a/man/xfer_draw.Rd +++ b/man/xfer_draw.Rd @@ -53,5 +53,5 @@ polygonTest <- xfer_draw(polyXfXY = userDrawPoly, polyXfID, \code{\link{xfer_userEnvs}} } \author{ -Gonzalo Pinilla +Gonzalo Pinilla } diff --git a/man/xfer_mess.Rd b/man/xfer_mess.Rd index 945807cf8..681863777 100644 --- a/man/xfer_mess.Rd +++ b/man/xfer_mess.Rd @@ -67,5 +67,5 @@ xferMess <- xfer_mess(occs = occsEnvs, bg = bgEnvs, bgMsk = envs, \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/xfer_time.Rd b/man/xfer_time.Rd index d58b31434..07336a301 100644 --- a/man/xfer_time.Rd +++ b/man/xfer_time.Rd @@ -107,5 +107,5 @@ Jamie Kass Andrea Paz -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/xfer_userEnvs.Rd b/man/xfer_userEnvs.Rd index ea1fa3f6a..35a674807 100644 --- a/man/xfer_userEnvs.Rd +++ b/man/xfer_userEnvs.Rd @@ -92,5 +92,5 @@ Jamie Kass Andrea Paz -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago } diff --git a/man/xfer_userExtent.Rd b/man/xfer_userExtent.Rd index 3d7f725ee..561d1b17c 100644 --- a/man/xfer_userExtent.Rd +++ b/man/xfer_userExtent.Rd @@ -54,7 +54,7 @@ xferUser <- xfer_userExtent(bgShp_path = pathShp, bgShp_name = nameShp, \author{ Jamie Kass -Gonzalo E. Pinilla-Buitrago +Gonzalo E. Pinilla-Buitrago Andrea Paz } From 584d0c1d4fba6381f45461cae148f06f00f28231 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Tue, 5 Sep 2023 14:05:29 -0400 Subject: [PATCH 09/39] removed rgdal --- DESCRIPTION | 6 +++--- NEWS.md | 1 + R/penvs_userBgExtent.R | 3 ++- R/xfer_userExtent.R | 4 +++- inst/shiny/server.R | 20 ++++++++++---------- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f8bea7a6f..f6fed57af 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -43,13 +43,13 @@ Imports: knitcitations, leafem, leaflet.extras (>= 1.0.0), - magrittr, methods, RColorBrewer, - rgdal, rgeos, + rJava, rlang, rmarkdown, + sf, shinyalert, shinyjs, shinyWidgets (>= 0.6.0), @@ -63,13 +63,13 @@ Suggests: dismo, jsonlite, knitr, + magrittr, mapview, maxnet, occCite, rangeModelMetadata, raster, rgbif (>= 3.3.0), - rJava, sp, terra, testthat diff --git a/NEWS.md b/NEWS.md index c81b74a13..5a4cb6b36 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ wallace 2.0.6 ============= - Removed `paleobioDB` (package off CRAN) +- Removed `rgdal` (package expiring) wallace 2.0.5 ============= diff --git a/R/penvs_userBgExtent.R b/R/penvs_userBgExtent.R index 26ea7d570..08f377325 100644 --- a/R/penvs_userBgExtent.R +++ b/R/penvs_userBgExtent.R @@ -68,7 +68,8 @@ penvs_userBgExtent <- function(bgShp_path, bgShp_name, userBgBuf, occs, file.rename(bgShp_path, file.path(pathdir, bgShp_name)) } # read in shapefile and extract coords - bgExt <- rgdal::readOGR(file.path(pathdir, bgShp_name)[i]) + bgExt <- sf::st_read(file.path(pathdir, bgShp_name)[i]) + bgExt <- sf::as_Spatial(bgExt) } else { logger %>% writeLog(type = 'error', diff --git a/R/xfer_userExtent.R b/R/xfer_userExtent.R index 22e271cbe..3d95971ba 100644 --- a/R/xfer_userExtent.R +++ b/R/xfer_userExtent.R @@ -60,7 +60,9 @@ xfer_userExtent <- function(bgShp_path, bgShp_name, userBgBuf, file.rename(bgShp_path, file.path(pathdir, bgShp_name)) } # read in shapefile and extract coords - bgExt <- rgdal::readOGR(file.path(pathdir, bgShp_name)[i]) + bgExt <- sf::st_read(file.path(pathdir, bgShp_name)[i]) + bgExt <- sf::as_Spatial(bgExt) + } else { logger %>% writeLog(type = 'error', diff --git a/inst/shiny/server.R b/inst/shiny/server.R index ca464d044..bbdd4dfc3 100644 --- a/inst/shiny/server.R +++ b/inst/shiny/server.R @@ -396,11 +396,11 @@ function(input, output, session) { on.exit(setwd(owd)) n <- curSp() - rgdal::writeOGR(obj = bgExt(), + sf::st_write(obj = sf::st_as_sf(bgExt()), dsn = tmpdir, layer = paste0(n, '_bgShp'), driver = "ESRI Shapefile", - overwrite_layer = TRUE) + append = FALSE) exts <- c('dbf', 'shp', 'shx') fs <- paste0(n, '_bgShp.', exts) @@ -771,7 +771,7 @@ function(input, output, session) { tmpdir <- tempdir() owd <- setwd(tmpdir) on.exit(setwd(owd)) - if(require(rgdal)) { + if(require(sf)) { if (input$predFileType == 'png') { req(mapPred()) if (!webshot::is_phantomjs_installed()) { @@ -842,7 +842,7 @@ function(input, output, session) { } } else { logger %>% - writeLog("Please install the rgdal package before downloading rasters.") + writeLog("Please install the sf package before downloading rasters.") } } ) @@ -866,11 +866,11 @@ function(input, output, session) { owd <- setwd(tmpdir) on.exit(setwd(owd)) n <- curSp() - rgdal::writeOGR(obj = spp[[curSp()]]$transfer$xfExt, + sf::st_write(obj = sf::st_as_sf(spp[[curSp()]]$transfer$xfExt), dsn = tmpdir, layer = paste0(n, '_xferShp'), driver = "ESRI Shapefile", - overwrite_layer = TRUE) + append = FALSE) exts <- c('dbf', 'shp', 'shx') fs <- paste0(n, '_xferShp.', exts) @@ -924,7 +924,7 @@ function(input, output, session) { tmpdir <- tempdir() owd <- setwd(tmpdir) on.exit(setwd(owd)) - if(require(rgdal)) { + if(require(sf)) { if (input$xferFileType == 'png') { req(mapXfer()) if (!webshot::is_phantomjs_installed()) { @@ -997,7 +997,7 @@ function(input, output, session) { file.rename(r@file@name, file) } } else { - logger %>% writeLog("Please install the rgdal package before downloading rasters.") + logger %>% writeLog("Please install the sf package before downloading rasters.") } } ) @@ -1013,7 +1013,7 @@ function(input, output, session) { tmpdir <- tempdir() owd <- setwd(tmpdir) on.exit(setwd(owd)) - if(require(rgdal)) { + if(require(sf)) { req(spp[[curSp()]]$transfer$mess, spp[[curSp()]]$transfer$xfExt) mess <- spp[[curSp()]]$transfer$mess if (input$messFileType == 'png') { @@ -1080,7 +1080,7 @@ function(input, output, session) { file.rename(r@file@name, file) } } else { - logger %>% writeLog("Please install the rgdal package before downloading rasters.") + logger %>% writeLog("Please install the sf package before downloading rasters.") } } ) From 7ae5469ba9918e10c7a8f033a4b39f8bf9084909 Mon Sep 17 00:00:00 2001 From: "Gonzalo E. Pinilla-Buitrago" Date: Tue, 5 Sep 2023 15:31:46 -0400 Subject: [PATCH 10/39] Update DESCRIPTION --- DESCRIPTION | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 931ef3cbf..70bd12e63 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -39,10 +39,10 @@ Imports: DT (>= 0.5), ecospat, ENMeval (>= 2.0.3), - glue, knitcitations, leafem, leaflet.extras (>= 1.0.0), + magrittr, methods, RColorBrewer, rgeos, @@ -55,15 +55,14 @@ Imports: shinyWidgets (>= 0.6.0), spocc (>= 1.2.0), spThin, - tools, zip Suggests: ade4, BIEN, dismo, + glue, jsonlite, knitr, - magrittr, mapview, maxnet, occCite, @@ -72,7 +71,8 @@ Suggests: rgbif (>= 3.3.0), sp, terra, - testthat + testthat, + tools License: GPL-3 URL: http://wallaceecomod.github.io/wallace/, Encoding: UTF-8 From 24e2da2462f98362574b4b9b81948759956272e3 Mon Sep 17 00:00:00 2001 From: "Gonzalo E. Pinilla-Buitrago" Date: Tue, 5 Sep 2023 15:53:52 -0400 Subject: [PATCH 11/39] update date 2.0.6 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 70bd12e63..0d9278642 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wallace Version: 2.0.6 -Date: 2023-09-01 +Date: 2023-09-05 Title: A Modular Platform for Reproducible Modeling of Species Niches and Distributions Description: The 'shiny' application Wallace is a modular platform for From 268aea7d4d9303bc50c5a3c831c018a87ad538ee Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Wed, 13 Sep 2023 22:08:17 -0400 Subject: [PATCH 12/39] removed `rgeos::gBuffer` --- R/penvs_bgExtent.R | 23 +++++++++++++++++------ R/penvs_drawBgExtent.R | 6 ++++-- R/penvs_userBgExtent.R | 11 ++++++++--- R/xfer_draw.R | 5 +++-- R/xfer_userExtent.R | 12 ++++++++---- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/R/penvs_bgExtent.R b/R/penvs_bgExtent.R index 2d4e23ac4..338fdb2ea 100644 --- a/R/penvs_bgExtent.R +++ b/R/penvs_bgExtent.R @@ -51,6 +51,10 @@ penvs_bgExtent <- function(occs, bgSel, bgBuf, logger = NULL, spN = NULL) { # make spatial pts object of original occs and preserve origID occs.sp <- sp::SpatialPointsDataFrame(occs.xy, data = occs['occID']) + # make an sf obj + occs.sf <- sf::st_as_sf(occs.xy, coords = c("longitude", "latitude")) + occs.sf <- sf::st_union(occs.sf, by_feature = FALSE) + # generate background extent - one grid cell is added to perimeter of each shape # to ensure cells of points on border are included if (bgSel == 'bounding box') { @@ -70,22 +74,29 @@ penvs_bgExtent <- function(occs, bgSel, bgBuf, logger = NULL, spN = NULL) { bgExt <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon(as.matrix(xy.bord))), 1))) msg <- "Study extent: minimum convex polygon." } else if (bgSel == 'point buffers') { - if (bgBuf == 0) { + if (bgBuf <= 0) { logger %>% writeLog(type = 'error', - 'Change buffer distance to positive or negative value.') + 'Change buffer distance to a positive value.') return() } - bgExt <- rgeos::gBuffer(occs.sp, width = bgBuf) + bgExt <- sf::st_buffer(occs.sf, dist = bgBuf) msg <- paste0("Study extent: buffered points. Buffered by ", bgBuf, " degrees.") } - if (bgBuf > 0 & bgSel != 'point buffers') { - bgExt <- rgeos::gBuffer(bgExt, width = bgBuf) + if (bgBuf >= 0 & bgSel != 'point buffers') { + bgExt <- sf::st_as_sf(bgExt) + bgExt <- sf::st_buffer(bgExt, dist = bgBuf) logger %>% writeLog(hlSpp(spN), msg, ' Buffered by ', bgBuf, ' degrees.') + } else if (bgBuf < 0 & bgSel != 'point buffers') { + logger %>% + writeLog(type = 'error', + 'All localities must be included within extent. + Change buffer distance to a positive value.') + return() } else { logger %>% writeLog(hlSpp(spN), msg) } - bgExt <- methods::as(bgExt, "SpatialPolygonsDataFrame") + bgExt <- sf::as_Spatial(bgExt) return(bgExt) } diff --git a/R/penvs_drawBgExtent.R b/R/penvs_drawBgExtent.R index ebd89b34d..2187cf347 100644 --- a/R/penvs_drawBgExtent.R +++ b/R/penvs_drawBgExtent.R @@ -56,10 +56,12 @@ penvs_drawBgExtent <- function(polyExtXY, polyExtID, drawBgBuf, occs, newPoly <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon(polyExtXY)), ID = polyExtID))) intersect <- sp::over(pts, newPoly) + newPoly.sf <- sf::st_as_sf(newPoly) + ptRem <- ifelse(all(!is.na(intersect)), 0, as.numeric(which(is.na(intersect)))) if (ptRem == 0) { - bgExt <- rgeos::gBuffer(newPoly, width = drawBgBuf) - bgExt <- methods::as(bgExt, "SpatialPolygonsDataFrame") + bgExt <- sf::st_buffer(newPoly.sf, dist = drawBgBuf) + bgExt <- sf::as_Spatial(bgExt) if (drawBgBuf == 0) { logger %>% writeLog(hlSpp(spN), 'Draw polygon without buffer.') } else { diff --git a/R/penvs_userBgExtent.R b/R/penvs_userBgExtent.R index f73760d84..321842339 100644 --- a/R/penvs_userBgExtent.R +++ b/R/penvs_userBgExtent.R @@ -34,7 +34,7 @@ #' userBgBuf = 0.2, occs = occs) #' #' @return This function returns a SpatialPolygons object with the user -#' provided shape (+ a buffer is userBgBuf >0). The polygon will be at least +#' provided shape (+ a buffer if userBgBuf >0). The polygon will be at least #' large enough to contain all occurrences. #' @author Jamie Kass #' @author Gonzalo E. Pinilla-Buitrago @@ -79,8 +79,13 @@ penvs_userBgExtent <- function(bgShp_path, bgShp_name, userBgBuf, occs, } if (userBgBuf >= 0) { - bgExt <- rgeos::gBuffer(bgExt, width = userBgBuf) - bgExt <- methods::as(bgExt, "SpatialPolygonsDataFrame") + bgExt <- sf::st_as_sf(bgExt) + bgExt <- sf::st_buffer(bgExt, dist = userBgBuf) + bgExt <- sf::as_Spatial(bgExt) + } else { + bgExt <- sf::st_as_sf(bgExt) + bgExt <- sf::st_buffer(bgExt, dist = userBgBuf) + bgExt <- sf::as_Spatial(bgExt) } ### Points outside polygon diff --git a/R/xfer_draw.R b/R/xfer_draw.R index e4ed133ce..03e718c44 100644 --- a/R/xfer_draw.R +++ b/R/xfer_draw.R @@ -41,8 +41,9 @@ xfer_draw <- function(polyXfXY, polyXfID, drawXfBuf, logger = NULL, spN = NULL) { newPoly <- sp::SpatialPolygons(list(sp::Polygons(list(sp::Polygon(polyXfXY)), ID = polyXfID))) - bgExt <- rgeos::gBuffer(newPoly, width = drawXfBuf) - bgExt <- methods::as(bgExt, "SpatialPolygonsDataFrame") + newPoly.sf <- sf::st_as_sf(newPoly) + bgExt <- sf::st_buffer(newPoly.sf, dist = drawXfBuf) + bgExt <- sf::as_Spatial(bgExt) if (drawXfBuf == 0) { logger %>% writeLog(hlSpp(spN), 'Draw polygon without buffer.') } else { diff --git a/R/xfer_userExtent.R b/R/xfer_userExtent.R index c04b0f919..fa8dd66d0 100644 --- a/R/xfer_userExtent.R +++ b/R/xfer_userExtent.R @@ -71,15 +71,19 @@ xfer_userExtent <- function(bgShp_path, bgShp_name, userBgBuf, return() } - if (userBgBuf >= 0) { - bgExt <- rgeos::gBuffer(bgExt, width = userBgBuf) - bgExt <- methods::as(bgExt, "SpatialPolygonsDataFrame") - } if (userBgBuf > 0) { + bgExt <- sf::st_as_sf(bgExt) + bgExt <- sf::st_buffer(bgExt, dist = userBgBuf) + bgExt <- sf::as_Spatial(bgExt) logger %>% writeLog( hlSpp(spN), 'Transferring extent user-defined polygon buffered by ', userBgBuf, ' degrees.') + } else if (userBgBuf < 0) { + logger %>% + writeLog(type = 'error', + 'Change buffer distance to a positive value.') + return() } else { logger %>% writeLog( hlSpp(spN), From 8fd1c98dd9ee4939090b2e6a9f39d3ffe431b2da Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Wed, 20 Sep 2023 14:57:18 -0400 Subject: [PATCH 13/39] removed rgeos::gIntersects() --- DESCRIPTION | 1 - inst/shiny/Rmd/userReport_intro.Rmd | 2 +- inst/shiny/modules/penvs_bgExtent.R | 2 +- inst/shiny/modules/penvs_bgExtent.md | 2 +- inst/shiny/modules/penvs_bgExtent.yml | 2 +- inst/shiny/modules/penvs_drawBgExtent.md | 6 ++---- inst/shiny/modules/xfer_area.R | 26 ++++++++++++++++-------- inst/shiny/modules/xfer_time.R | 9 ++++---- inst/shiny/modules/xfer_user.R | 9 ++++---- 9 files changed, 34 insertions(+), 25 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0d9278642..31aa831dc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -45,7 +45,6 @@ Imports: magrittr, methods, RColorBrewer, - rgeos, rJava, rlang, rmarkdown, diff --git a/inst/shiny/Rmd/userReport_intro.Rmd b/inst/shiny/Rmd/userReport_intro.Rmd index aa0c4fab4..525ff2853 100644 --- a/inst/shiny/Rmd/userReport_intro.Rmd +++ b/inst/shiny/Rmd/userReport_intro.Rmd @@ -25,7 +25,7 @@ Wallace uses the following R packages that must be installed and loaded before s library(spocc) library(spThin) library(dismo) -library(rgeos) +library(sf) library(ENMeval) library(wallace) ``` diff --git a/inst/shiny/modules/penvs_bgExtent.R b/inst/shiny/modules/penvs_bgExtent.R index d0874d054..0b9db46f2 100644 --- a/inst/shiny/modules/penvs_bgExtent.R +++ b/inst/shiny/modules/penvs_bgExtent.R @@ -72,7 +72,7 @@ penvs_bgExtent_module_server <- function(input, output, session, common) { spp[[sp]]$procEnvs$bgExt <- bgExt # REFERENCES #### - knitcitations::citep(citation("rgeos")) + knitcitations::citep(citation("sf")) knitcitations::citep(citation("sp")) # METADATA #### diff --git a/inst/shiny/modules/penvs_bgExtent.md b/inst/shiny/modules/penvs_bgExtent.md index 62ed3f82e..41f6bcc8c 100644 --- a/inst/shiny/modules/penvs_bgExtent.md +++ b/inst/shiny/modules/penvs_bgExtent.md @@ -6,7 +6,7 @@ For niche/distribution modeling approaches that compare the environments associa **IMPLEMENTATION** -This module relies on important functions from the R packages `sp` (for defining spatial objects) and `rgeos` (for buffering spatial objects). +This module relies on important functions from the R packages `sp` (for defining spatial objects) and `sf` (for buffering spatial objects). In this module, *Wallace* provides three simple ways to delimit a study region, by: 1) bounding box (rectangle with most the extreme coordinates in the four cardinal directions as vertices), 2) minimum convex polygon (a convex shape drawn around localities with minimized area), or 3) buffers around occurrence points. For each of these options, users can specify a buffer distance (in degrees; i.e. not meters). *Wallace* then masks the environmental grids by the resulting polygon. Users can download the masked grids as three raster grid formats (.asc, .grd, and .tif). diff --git a/inst/shiny/modules/penvs_bgExtent.yml b/inst/shiny/modules/penvs_bgExtent.yml index a7c7602d8..5a4838389 100644 --- a/inst/shiny/modules/penvs_bgExtent.yml +++ b/inst/shiny/modules/penvs_bgExtent.yml @@ -2,4 +2,4 @@ component: "penvs" short_name: "Select Study Region" long_name: "Select Study Region by Extent" authors: "Jamie M. Kass, Bruno Vilela, Robert P. Anderson" -package: [sp, rgeos] +package: [sp, sf] diff --git a/inst/shiny/modules/penvs_drawBgExtent.md b/inst/shiny/modules/penvs_drawBgExtent.md index ec3122990..aadd4b0b3 100644 --- a/inst/shiny/modules/penvs_drawBgExtent.md +++ b/inst/shiny/modules/penvs_drawBgExtent.md @@ -8,17 +8,15 @@ This module allows users to use the polygon-drawing tool to delineate the study The R package `leaflet.extras` (Karambelkar et al. 2018) provides a drawing tool plugin to the `leaflet` map (Cheng et al. 2022) for this module, which allows users to draw a polygon to specify the study region. The polygon-drawing tool icon is located underneath the zoom in/out buttons on the map. If a mistake is made while drawing, the last point can be deleted, or the whole drawing can be cleared. To finish, click the first point to close the shape. -Also, this module relies on `rgeos` (Bivand et al. 2021) for buffering spatial objects. A buffer can be applied (in degrees) to the drawn polygon before moving on to Step 2) Sample Background Points. +Also, this module relies on `sf` (Pebesma 2018) for buffering spatial objects. A buffer can be applied (in degrees) to the drawn polygon before moving on to Step 2) Sample Background Points. Wallace then masks the environmental grids by the resulting polygon. Users can download the masked grids in three raster grid formats (.asc, .grd, and .tif). **REFERENCES** -Bivand, R., Rundel, C., Pebesma, E., Stuetz, R., Hufthammer, K.O., Giraudoux, P., Davis, M, & Santilli, S. (2021). rgeos: Interface to Geometry Engine - Open Source ('GEOS'). CRAN. R package Version 0.5-0.9. -CRAN - Cheng, et al. (2022). leaflet: Create Interactive Web Maps with the JavaScript 'Leaflet' Library. R package Version 2.1. GitHub Karambelkar, et al. (2018). leaflet.extras: Extra Functionality for 'leaflet' Package. R package Version 1.0. GitHub +Pebesma, E., 2018. Simple Features for R: Standardized Support for Spatial Vector Data. The R Journal 10 (1), 439-446, DOI:10.32614/RJ-2018-009. diff --git a/inst/shiny/modules/xfer_area.R b/inst/shiny/modules/xfer_area.R index 4d39629e8..dae950fd6 100644 --- a/inst/shiny/modules/xfer_area.R +++ b/inst/shiny/modules/xfer_area.R @@ -117,13 +117,22 @@ xfer_area_module_server <- function(input, output, session, common) { input$userXfBuf, logger, spN = curSp()) # ERRORS #### # Check that the extents of raster and transfer extent intersects - if (!rgeos::gIntersects(polyXf, - methods::as(raster::extent(envs()), - 'SpatialPolygons'))) { + polyXf_sfc <- sf::st_as_sfc(polyXf) #convert poly to sfc + envs_ext <- methods::as(raster::extent(envs()),'SpatialPolygons') + envs_sfc <- sf::st_as_sfc(envs_ext) #convert envs to sfc + #set crs to match + if (sf::st_crs(polyXf_sfc) != sf::st_crs(envs_sfc)) { + sf::st_crs(polyXf_sfc) <- sf::st_crs(envs_sfc) logger %>% - writeLog(type = 'error', 'Extents do not overlap') + writeLog(type = 'error', 'CRS was automatically set to match environmental variables.') return() } + if (!sf::st_intersects(polyXf_sfc, envs_sfc, sparse = FALSE)[1,1]) { + logger %>% + writeLog(type = 'error', 'Extents do not overlap.') + return() + } + # METADATA #### spp[[curSp()]]$rmm$code$wallace$XfBuff <- input$userXfBuf # get extensions of all input files @@ -162,11 +171,12 @@ xfer_area_module_server <- function(input, output, session, common) { return() } # Check that the extents of raster and transfer extent intersects - if (!rgeos::gIntersects(spp[[curSp()]]$transfer$xfExt, - methods::as(raster::extent(envs()), - 'SpatialPolygons'))) { + Xfer_sfc <- sf::st_as_sfc(spp[[curSp()]]$transfer$xfExt) #convert xfrExt to sfc + envs_ext <- methods::as(raster::extent(envs()),'SpatialPolygons') + envs_sfc <- sf::st_as_sfc(envs_ext) #convert envs to sfc + if (!sf::st_intersects(Xfer_sfc, envs_sfc, sparse = FALSE)[1,1]) { logger %>% - writeLog(type = 'error', 'Extents do not overlap') + writeLog(type = 'error', 'Extents do not overlap.') return() } diff --git a/inst/shiny/modules/xfer_time.R b/inst/shiny/modules/xfer_time.R index 06c46cbe7..eb4d97dfb 100644 --- a/inst/shiny/modules/xfer_time.R +++ b/inst/shiny/modules/xfer_time.R @@ -310,11 +310,12 @@ xfer_time_module_server <- function(input, output, session, common) { # ERRORS #### # Check that the extents of raster and extent of transfer intersects - if (!rgeos::gIntersects(spp[[curSp()]]$transfer$xfExt, - methods::as(raster::extent(xferTimeEnvs), - 'SpatialPolygons'))) { + Xfer_sfc <- sf::st_as_sfc(spp[[curSp()]]$transfer$xfExt) #convert poly to sfc + xferTimeEnvs_sp <- methods::as(raster::extent(xferTimeEnvs),'SpatialPolygons') + xferTimeEnvs_sfc <- sf::st_as_sfc(xferTimeEnvs_sp) #convert xfer envs to sfc + if (!sf::st_intersects(Xfer_sfc, xferTimeEnvs_sfc, sparse = FALSE)[1,1]) { logger %>% - writeLog(type = 'error', 'Extents do not overlap') + writeLog(type = 'error', 'Extents do not overlap.') return() } diff --git a/inst/shiny/modules/xfer_user.R b/inst/shiny/modules/xfer_user.R index a3894076a..d79fd77e9 100644 --- a/inst/shiny/modules/xfer_user.R +++ b/inst/shiny/modules/xfer_user.R @@ -227,11 +227,12 @@ xfer_user_module_server <- function(input, output, session, common) { # ERRORS #### # Check that the extents of raster and extent of transfer intersects - if (!rgeos::gIntersects(spp[[curSp()]]$transfer$xfExt, - methods::as(raster::extent(userXferEnvs), - 'SpatialPolygons'))) { + Xfer_sfc <- sf::st_as_sfc(spp[[curSp()]]$transfer$xfExt) #convert poly to sfc + userXferEnvs_sp <- methods::as(raster::extent(userXferEnvs),'SpatialPolygons') + userXferEnvs_sfc <- sf::st_as_sfc(userXferEnvs_sp) #convert user envs to sfc + if (!sf::st_intersects(Xfer_sfc, userXferEnvs_sfc, sparse = FALSE)[1,1]) { logger %>% - writeLog(type = 'error', 'Extents do not overlap') + writeLog(type = 'error', 'Extents do not overlap.') return() } From a5fde9fed788bb598629a9c64bf44e4edcd283d0 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Wed, 20 Sep 2023 15:05:47 -0400 Subject: [PATCH 14/39] removed typo --- inst/shiny/modules/xfer_area.R | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/inst/shiny/modules/xfer_area.R b/inst/shiny/modules/xfer_area.R index dae950fd6..64d6c4bec 100644 --- a/inst/shiny/modules/xfer_area.R +++ b/inst/shiny/modules/xfer_area.R @@ -45,7 +45,7 @@ xfer_area_module_ui <- function(id) { actionButton(ns('goTransferArea'), "Transfer"), tags$hr(class = "hrDashed"), actionButton(ns("goResetXfer"), "Reset", class = 'butReset'), - strong(" transferion extent ") + strong(" transfer extent ") ) } @@ -167,7 +167,7 @@ xfer_area_module_server <- function(input, output, session, common) { return() } if (is.null(spp[[curSp()]]$transfer$xfExt)) { - logger %>% writeLog(type = 'error', 'Select transferion extent first.') + logger %>% writeLog(type = 'error', 'Select transfer extent first.') return() } # Check that the extents of raster and transfer extent intersects @@ -310,7 +310,7 @@ xfer_area_module_server <- function(input, output, session, common) { spp[[curSp()]]$polyXfXY <- NULL spp[[curSp()]]$polyXfID <- NULL spp[[curSp()]]$transfer <- NULL - logger %>% writeLog("Reset transferion extent.") + logger %>% writeLog("Reset transfer extent.") }) return(list( @@ -347,7 +347,7 @@ xfer_area_module_map <- function(map, common) { circleOptions = FALSE, markerOptions = FALSE, circleMarkerOptions = FALSE, editOptions = leaflet.extras::editToolbarOptions() ) - # Add just transferion Polygon + # Add just transfer Polygon req(spp[[curSp()]]$transfer$xfExt) polyXfXY <- spp[[curSp()]]$transfer$xfExt@polygons[[1]]@Polygons if(length(polyXfXY) == 1) { @@ -384,7 +384,7 @@ xfer_area_module_map <- function(map, common) { values = mapXferVals, layerId = 'xfer', labFormat = reverseLabel(2, reverse_order = TRUE)) } - # map model prediction raster and transferion polygon + # map model prediction raster and transfer polygon map %>% clearMarkers() %>% clearShapes() %>% removeImage('xferRas') %>% addRasterImage(mapXfer(), colors = rasPal, opacity = 0.7, layerId = 'xferRas', group = 'xfer', method = "ngb") @@ -408,9 +408,9 @@ xfer_area_module_rmd <- function(species) { polyXfID_rmd = if(!is.null(species$rmm$code$wallace$drawExtPolyXfCoords)){ species$polyXfID} else {0}, BgBuf_rmd = species$rmm$code$wallace$XfBuff, - ##Determine the type of transferion extent to use correct RMD function + ##Determine the type of transfer extent to use correct RMD function xfer_area_extent_knit = !is.null(species$rmm$code$wallace$userXfShpParams), - ##Use of threshold for transferion + ##Use of threshold for transfer xfer_area_threshold_knit = !is.null(species$rmm$prediction$transfer$environment1$thresholdSet), xfer_thresholdRule_rmd = species$rmm$prediction$transfer$environment1$thresholdRule, xfer_threshold_rmd = if (!is.null(species$rmm$prediction$transfer$environment1$thresholdSet)){ From 0ffd167cbb1dc007c6e9926e582066a5153054b5 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Thu, 21 Sep 2023 14:07:39 -0400 Subject: [PATCH 15/39] update Team bios --- inst/shiny/Rmd/text_team.Rmd | 13 ++++++++----- inst/shiny/modules/rep_refPackages.yml | 2 +- vignettes/module-addition.Rmd | 2 +- vignettes/tutorial-v2-esp.Rmd | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/inst/shiny/Rmd/text_team.Rmd b/inst/shiny/Rmd/text_team.Rmd index edc598315..9f64ce6e9 100644 --- a/inst/shiny/Rmd/text_team.Rmd +++ b/inst/shiny/Rmd/text_team.Rmd @@ -15,17 +15,20 @@ output: html_document gonzalo -Gonzalo E. Pinilla-Buitrago (co-lead developer) is a PhD candidate at the CUNY Graduate Center and City College of New York. +Gonzalo E. Pinilla-Buitrago (co-lead developer) received his PhD from the CUNY Graduate Center and City College of New York. He is currently a Postdoctoral Researcher at Yale University.
andrea -Andrea Paz (developer) received her PhD at CUNY Graduate Center and City College of New York and is now a Postdoctoral Researcher at the Crowther Lab in ETH Zürich. +Andrea Paz (developer) received her PhD at CUNY Graduate Center and City College of New York, after which she was a Postdoctoral Researcher at the Crowther Lab in ETH Zürich. She is now an Assistant Professor at the Biological Sciences Department, University of Montréal.
bethany -Bethany A. Johnson (developer) is a Master's student at the City College of New York. +Bethany A. Johnson (developer) received her MS in Biology from the City College of New York and is currently a Visiting Scientist at the Center for Biodiversity & Conservation at the American Museum of Natural History. +
+ +Daniel López Lozano (developer) is a Biodiversity Informatics Specialist at the American Museum of Natural History's Center for Biodiversity & Conservation.
valentina @@ -57,7 +60,7 @@ output: html_document mary -Mary E. Blair (co-manager) is the Director of Biodiversity Informatics Research at the Center for Biodiversity and Conservation at the American Museum of Natural History. +Mary E. Blair (co-manager) is the Director of Biodiversity Informatics Research at the Center for Biodiversity & Conservation at the American Museum of Natural History.
## Contributors @@ -74,7 +77,7 @@ Sarah Meenan (contributor) completed her undergraduate degree from the City Coll peteG -Peter J. Galante (contributor) was a Biodiversity Informatics Scientist at the Center for Biodiversity and Conservation at the American Museum of Natural History and now works as a Project Manager for Storke, LLC, a renewable energy company. +Peter J. Galante (contributor) was formerly a Biodiversity Informatics Scientist at the Center for Biodiversity & Conservation at the American Museum of Natural History and now works as a Project Manager for Storke, LLC, a renewable energy company.
brianM diff --git a/inst/shiny/modules/rep_refPackages.yml b/inst/shiny/modules/rep_refPackages.yml index f2b07ccc8..c686e5e8d 100644 --- a/inst/shiny/modules/rep_refPackages.yml +++ b/inst/shiny/modules/rep_refPackages.yml @@ -1,5 +1,5 @@ component: "rep" short_name: "Reference Packages" long_name: "List Reference Packages" -authors: "Gonzalo E. Pinilla-Buitrago, Bethany Johnson, Robert P. Anderson" +authors: "Gonzalo E. Pinilla-Buitrago, Bethany A. Johnson, Robert P. Anderson" package: [RefManageR, knitcitations] diff --git a/vignettes/module-addition.Rmd b/vignettes/module-addition.Rmd index 5fa880bb8..412cb2ea3 100644 --- a/vignettes/module-addition.Rmd +++ b/vignettes/module-addition.Rmd @@ -1,6 +1,6 @@ --- title: "How to write a module in Wallace" -author: "Gonzalo Pinilla-Buitrago, Jamie M. Kass, Siew Fong Chen, Peter Galante, Bethany Johnson, Dean Attali" +author: "Gonzalo Pinilla-Buitrago, Jamie M. Kass, Siew Fong Chen, Peter Galante, Bethany A. Johnson, Dean Attali" date: "April 19, 2022" output: rmarkdown::html_vignette vignette: > diff --git a/vignettes/tutorial-v2-esp.Rmd b/vignettes/tutorial-v2-esp.Rmd index 351a2c1a0..3427f3c18 100644 --- a/vignettes/tutorial-v2-esp.Rmd +++ b/vignettes/tutorial-v2-esp.Rmd @@ -2,7 +2,7 @@ title: "Tutorial de Wallace Aplicación de modelado Ecológico v2.0" author: - Bethany A. Johnson, Gonzalo E. Pinilla-Buitrago, Andrea Paz, Jamie M. Kass, Sarah I. Meenan, Robert P. Anderson -- Traducción al español por Andrea Paz y Bethany Johnson +- Traducción al español por Andrea Paz y Bethany A. Johnson date: "2023-03-11" output: rmarkdown::html_vignette vignette: > From 2214bac21e08dfc55cf96f8094a2647007119f5a Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Thu, 21 Sep 2023 17:51:07 -0400 Subject: [PATCH 16/39] fixed buffer tests --- R/penvs_bgExtent.R | 2 +- R/penvs_drawBgExtent.R | 6 +++--- R/xfer_draw.R | 2 +- tests/testthat/test_penvs_bgExtent.R | 8 ++++---- tests/testthat/test_penvs_drawBgExtent.R | 4 ++-- tests/testthat/test_xfer_draw.R | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/R/penvs_bgExtent.R b/R/penvs_bgExtent.R index 338fdb2ea..79b31ad97 100644 --- a/R/penvs_bgExtent.R +++ b/R/penvs_bgExtent.R @@ -26,7 +26,7 @@ #' occs$occID <- 1:nrow(occs) #' bgExt <- penvs_bgExtent(occs, bgSel = 'bounding box', bgBuf = 0.5) #' -#' @return A SpatialPolygonsDataFrame object that contains all occurrences from occs +#' @return A SpatialPolygons object that contains all occurrences from occs #' @author Jamie Kass #' @author Gonzalo E. Pinilla-Buitrago # @note diff --git a/R/penvs_drawBgExtent.R b/R/penvs_drawBgExtent.R index 2187cf347..75c3935eb 100644 --- a/R/penvs_drawBgExtent.R +++ b/R/penvs_drawBgExtent.R @@ -35,9 +35,9 @@ #' ncol = 2) #' drawBgBf <- penvs_drawBgExtent(polyExtXY = expertDrawPoly, polyExtID = 1, #' drawBgBuf = 0.5, occs) -#' @return This functions returns a SpatialPolygonsDataFrame based on the user -#' specified coordinates (drawn on map). This SpatialPolygonsDataFrame may be -#' larger than specified if drawBgBuf > 0. The SpatialPolygonsDataFrame will +#' @return This functions returns a SpatialPolygons object based on the user +#' specified coordinates (drawn on map). This SpatialPolygons object may be +#' larger than specified if drawBgBuf > 0. The SpatialPolygons object will #' include all occurrences. #' @author Jamie Kass diff --git a/R/xfer_draw.R b/R/xfer_draw.R index 03e718c44..c0819750a 100644 --- a/R/xfer_draw.R +++ b/R/xfer_draw.R @@ -29,7 +29,7 @@ #' polygonTest <- xfer_draw(polyXfXY = userDrawPoly, polyXfID, #' drawXfBuf) #' -#' @return This functions returns a SpatialPolygonsDataFrame based on the user +#' @return This functions returns a SpatialPolygons object based on the user #' specified coordinates (drawn on map). This SpatialPolygonsDataFrame may be #' larger than specified if drawBgBuf > 0. diff --git a/tests/testthat/test_penvs_bgExtent.R b/tests/testthat/test_penvs_bgExtent.R index c7b5b0cea..3496a9b74 100644 --- a/tests/testthat/test_penvs_bgExtent.R +++ b/tests/testthat/test_penvs_bgExtent.R @@ -45,15 +45,15 @@ test_that("error checks", { # buffer == 0 while using Point Buffers as background extent expect_error(penvs_bgExtent(occs , bgSel = bPoint, bgBuf = 0), - 'Change buffer distance to positive or negative value.') + 'Change buffer distance to a positive value.') }) ### test output features test_that("output type checks", { # the output is a SpatialPolygonsDataFrame - expect_is(bgExt1, "SpatialPolygonsDataFrame") - expect_is(bgExt2, "SpatialPolygonsDataFrame") - expect_is(bgExt3, "SpatialPolygonsDataFrame") + expect_is(bgExt1, "SpatialPolygons") + expect_is(bgExt2, "SpatialPolygons") + expect_is(bgExt3, "SpatialPolygons") # the area of each type of the background extents is different expect_false(raster::area(bgExt1) == raster::area(bgExt2)) expect_false(raster::area(bgExt1) == raster::area(bgExt3)) diff --git a/tests/testthat/test_penvs_drawBgExtent.R b/tests/testthat/test_penvs_drawBgExtent.R index 67d3f848a..f3a3033ba 100644 --- a/tests/testthat/test_penvs_drawBgExtent.R +++ b/tests/testthat/test_penvs_drawBgExtent.R @@ -50,8 +50,8 @@ test_that("error checks", { ### test output features test_that("output type checks", { # the output is a SpatialPolygons - expect_is(drawBgBf, "SpatialPolygonsDataFrame") - expect_is(drawBg, "SpatialPolygonsDataFrame") + expect_is(drawBgBf, "SpatialPolygons") + expect_is(drawBg, "SpatialPolygons") # the area of background buffered is different from the one not buffered expect_true(raster::area(drawBgBf) > raster::area(drawBg)) ## check if all the records are within the drawn polygon diff --git a/tests/testthat/test_xfer_draw.R b/tests/testthat/test_xfer_draw.R index 70f97a6b6..d5e59a12e 100644 --- a/tests/testthat/test_xfer_draw.R +++ b/tests/testthat/test_xfer_draw.R @@ -20,8 +20,8 @@ polygonTestZero <- xfer_draw(polyXfXY = userDrawPoly, polyXfID, test_that("output type checks", { # the drawn polygon does not include all localities - expect_is(polygonTest,'SpatialPolygonsDataFrame') - expect_is(polygonTestZero,'SpatialPolygonsDataFrame') + expect_is(polygonTest,'SpatialPolygons') + expect_is(polygonTestZero,'SpatialPolygons') ###the extent of the polygon for buffer = 0 corresponds to maximum provided expect_equal(sp::bbox(polygonTestZero)[1,1],min(longitude)) expect_equal(sp::bbox(polygonTestZero)[2,1],min(latitude)) From 6eee5880c88d208cb8d7d0d1905e9c8e6b515098 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Mon, 25 Sep 2023 12:43:01 -0400 Subject: [PATCH 17/39] removed typo --- inst/shiny/modules/xfer_area.R | 6 +++--- inst/shiny/modules/xfer_time.R | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/inst/shiny/modules/xfer_area.R b/inst/shiny/modules/xfer_area.R index 64d6c4bec..358acf413 100644 --- a/inst/shiny/modules/xfer_area.R +++ b/inst/shiny/modules/xfer_area.R @@ -243,11 +243,11 @@ xfer_area_module_server <- function(input, output, session, common) { thr <- stats::quantile(occPredVals, probs = input$trainPresQuantile) } xferAreaThr <- xferArea > thr - logger %>% writeLog(hlSpp(curSp()), "Transferion of model to new area with threshold ", + logger %>% writeLog(hlSpp(curSp()), "Transfer of model to new area with threshold ", input$threshold, ' (', formatC(thr, format = "e", 2), ').') } else { xferAreaThr <- xferArea - logger %>% writeLog(hlSpp(curSp()), "Transferion of model to new area with ", + logger %>% writeLog(hlSpp(curSp()), "Transfer of model to new area with ", predType, ' output.') } raster::crs(xferAreaThr) <- raster::crs(envs()) @@ -305,7 +305,7 @@ xfer_area_module_server <- function(input, output, session, common) { common$update_component(tab = "Map") }) - # Reset Transferion Extent button functionality + # Reset Transfer Extent button functionality observeEvent(input$goResetXfer, { spp[[curSp()]]$polyXfXY <- NULL spp[[curSp()]]$polyXfID <- NULL diff --git a/inst/shiny/modules/xfer_time.R b/inst/shiny/modules/xfer_time.R index eb4d97dfb..3941d5a9b 100644 --- a/inst/shiny/modules/xfer_time.R +++ b/inst/shiny/modules/xfer_time.R @@ -223,7 +223,7 @@ xfer_time_module_server <- function(input, output, session, common) { polyXf <- spp[[curSp()]]$procEnvs$bgExt logger %>% writeLog( hlSpp(curSp()), - 'Transferion extent equal to current extent region.') + 'Transfer extent equal to current extent region.') } # LOAD INTO SPP #### spp[[curSp()]]$transfer$xfExt <- polyXf @@ -360,13 +360,13 @@ xfer_time_module_server <- function(input, output, session, common) { } xferTimeThr <- xferTime > thr if (input$selTimeVar == 'worldclim') { - logger %>% writeLog(hlSpp(curSp()), "Transferion of model to ", paste0('20', input$selTime), + logger %>% writeLog(hlSpp(curSp()), "Transfer of model to ", paste0('20', input$selTime), ' with threshold ', input$threshold, ' (', formatC(thr, format = "e", 2), ") for GCM ", GCMlookup[input$selGCM], " under RCP ", as.numeric(input$selRCP)/10.0, ".") } else if (input$selTimeVar == 'ecoclimate') { - logger %>% writeLog(hlSpp(curSp()), "Transferion of model to ", input$xfScenario, + logger %>% writeLog(hlSpp(curSp()), "Transfer of model to ", input$xfScenario, ' with threshold ', input$threshold, ' (', formatC(thr, format = "e", 2), ") for GCM ", input$xfAOGCM, ".") @@ -374,11 +374,11 @@ xfer_time_module_server <- function(input, output, session, common) { } else { xferTimeThr <- xferTime if (input$selTimeVar == 'worldclim') { - logger %>% writeLog(hlSpp(curSp()), "Transferion of model to ", paste0('20', input$selTime), + logger %>% writeLog(hlSpp(curSp()), "Transfer of model to ", paste0('20', input$selTime), ' with ', predType, " output for GCM ", GCMlookup[input$selGCM], " under RCP ", as.numeric(input$selRCP)/10.0, ".") } else if (input$selTimeVar == 'ecoclimate') { - logger %>% writeLog(hlSpp(curSp()), "Transferion of model to ", input$xfScenario, + logger %>% writeLog(hlSpp(curSp()), "Transfer of model to ", input$xfScenario, ' with ', predType, " output for GCM ", input$xfAOGCM, ".") } } @@ -477,7 +477,7 @@ xfer_time_module_server <- function(input, output, session, common) { common$update_component(tab = "Map") }) - # Reset Transferion Extent button functionality + # Reset Transfer Extent button functionality observeEvent(input$goResetXfer, { spp[[curSp()]]$polyXfXY <- NULL spp[[curSp()]]$polyXfID <- NULL From 278eb60291434f77123c38293638f728aa210a1e Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Mon, 25 Sep 2023 13:24:56 -0400 Subject: [PATCH 18/39] clarification to guidance text --- inst/shiny/modules/occs_queryDb.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/shiny/modules/occs_queryDb.md b/inst/shiny/modules/occs_queryDb.md index f8589fb04..ff1c50fb1 100644 --- a/inst/shiny/modules/occs_queryDb.md +++ b/inst/shiny/modules/occs_queryDb.md @@ -6,11 +6,11 @@ Over the past two decades, the worldwide biodiversity informatics community has **IMPLEMENTATION** -By default, this module relies on the R package `spocc`, which provides streamlined access to many species occurrence databases, some of which aggregate data from myriad providers (e.g., individual museums or citizen-science initiatives) (Chamberlain et al. 2021). Currently, users can choose among two of the largest databases: GBIF and VertNet. Note that as implemented at present, users must choose only one of these databases, and any later download overwrites previous ones. +By default, this module relies on the R package `spocc`, which provides streamlined access to many species occurrence databases, some of which aggregate data from myriad providers (e.g., individual museums or citizen-science initiatives) (Chamberlain et al. 2021). Currently, users can choose among three of the largest databases: GBIF, VertNet, and BIEN. Note that as implemented at present, users must choose only one of these databases, and any later download overwrites previous ones. When GBIF has been selected, an alternative option exists to receive data source citations in addition to the records themselves. In this case, the module will use the R package `occCite` instead of `spocc`. Whereas `spocc` uses the `occ_search()` function from the `rgbif` package to perform a streamlined search of the GBIF database (Chamberlain et al. 2021), the `occCite` package instead uses `occ_download()` from the `rgbif` package (Owens et al. 2021). While this requires the user to enter their GBIF login information (which must be set up beforehand), the search has two advantages. First, it returns a DOI that can be used to cite the downloaded dataset when publishing manuscripts and other descriptions of research results. Second, it has no hard limit on the number of occurrences that can be obtained (which is set at 100,000 in searches conducted with `occ_search()`. -For all options in this module, records used in downstream analyses in *Wallace* are filtered to remove those without georeferences (latitude/longitude coordinates) and that have exact duplicate coordinates of other records (including the same number of decimal places). The "Occurrences" tab displays all the filtered records with several key fields: scientific_name, longitude, latitude, country, state_province, locality, year, record_type, catalog_number, institution_code, elevation, (standard field names from GBIF), and uncertainty. The records are available for download as a .csv file with all original fields and include records without georeferences, or as the cleaned table shown in the “Occurrences” tab. Additionally, the user can choose to retain only records that have an estimate of the uncertainty of the georeference, which can be critical for assessing whether or not the record is of sufficient quality for a given analysis (Anderson et al. 2020). +For all options in this module, records are filtered to include presences only (excuding absence data). Also, records used in downstream analyses in *Wallace* are filtered to remove those without georeferences (latitude/longitude coordinates) and that have exact duplicate coordinates of other records (including the same number of decimal places). The "Occurrences" tab displays all the filtered records with several key fields: scientific_name, longitude, latitude, country, state_province, locality, year, record_type, catalog_number, institution_code, elevation, (standard field names from GBIF), and uncertainty. The records are available for download as a .csv file with all original fields and include records without georeferences, or as the cleaned table shown in the “Occurrences” tab. Additionally, the user can choose to retain only records that have an estimate of the uncertainty of the georeference, which can be critical for assessing whether or not the record is of sufficient quality for a given analysis (Anderson et al. 2020). **REFERENCES** From f38761b929917941c74e67d9719dce90322ad480 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Mon, 25 Sep 2023 13:39:07 -0400 Subject: [PATCH 19/39] [v2.1.0] removed rgeos, updated team bios, fixed typos & gt --- DESCRIPTION | 4 ++-- NEWS.md | 6 ++++++ README.md | 4 ++-- inst/shiny/Rmd/text_about.Rmd | 2 +- inst/shiny/Rmd/text_intro_tab.Rmd | 2 +- inst/shiny/Rmd/userReport_intro.Rmd | 2 +- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 31aa831dc..ea48ba86a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wallace -Version: 2.0.6 -Date: 2023-09-05 +Version: 2.1.0 +Date: 2023-09-25 Title: A Modular Platform for Reproducible Modeling of Species Niches and Distributions Description: The 'shiny' application Wallace is a modular platform for diff --git a/NEWS.md b/NEWS.md index 4a1ebdbb2..bd76e22bb 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +wallace 2.1.0 +============= +- Removed `rgeos` (package expiring) +- Updated team bios +- Added clarification to occs_queryDb guidance text + wallace 2.0.6 ============= - Removed `paleobioDB` (package off CRAN) diff --git a/README.md b/README.md index 507c95c0c..fbeab92da 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![R-CMD-check](https://github.com/wallaceEcoMod/wallace/workflows/R-CMD-check/badge.svg)](https://github.com/wallaceEcoMod/wallace/actions) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![CRAN version](http://www.r-pkg.org/badges/version/wallace)](https://CRAN.R-project.org/package=wallace) [![downloads](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange)](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange) -# Wallace (v2.0.6) +# Wallace (v2.1.0) *Wallace* is a modular platform for reproducible modeling of species niches and distributions, written in R. The application guides users through a complete analysis, from the acquisition of data to visualizing model predictions on an interactive map, thus bundling complex workflows into a single, streamlined interface. @@ -27,7 +27,7 @@ run_wallace() Please make sure you have installed the latest versions of both R (Mac OS, Windows) and RStudio (Mac OS / Windows: choose the free version). #### How to run Maxent with maxent.jar -*Wallace* v2.0.6 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. +*Wallace* v2.1.0 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. ### Potential Issues diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index 01d0c99b6..d8c89ba4f 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -7,7 +7,7 @@ output: html_document logo -Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.0.6) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. +Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.1.0) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. The application is written in `R` with the web app development package `shiny`. Please find the stable version of *Wallace* on CRAN, and the development version on Github. We also maintain a *Wallace* website that has some basic info, links, and will be updated with tutorial materials in the near future. diff --git a/inst/shiny/Rmd/text_intro_tab.Rmd b/inst/shiny/Rmd/text_intro_tab.Rmd index c14c48f03..4d1cd6f53 100644 --- a/inst/shiny/Rmd/text_intro_tab.Rmd +++ b/inst/shiny/Rmd/text_intro_tab.Rmd @@ -5,7 +5,7 @@ output: html_document #### WORKFLOW -*Wallace* (v2.0.6) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. +*Wallace* (v2.1.0) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. **Components:** diff --git a/inst/shiny/Rmd/userReport_intro.Rmd b/inst/shiny/Rmd/userReport_intro.Rmd index 525ff2853..0db7bac57 100644 --- a/inst/shiny/Rmd/userReport_intro.Rmd +++ b/inst/shiny/Rmd/userReport_intro.Rmd @@ -10,7 +10,7 @@ knit_engines$set(asis = function(options) { knitr::opts_chunk$set(message = FALSE, warning = FALSE, eval = FALSE) ``` -Please find below the R code history from your *Wallace* v2.0.6 session. +Please find below the R code history from your *Wallace* v2.1.0 session. You can reproduce your session results by running this R Markdown file in RStudio. From 2f5170b7b63665a1915f49511fb91441ec13a3ce Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Mon, 25 Sep 2023 14:33:28 -0400 Subject: [PATCH 20/39] added error msgs to xfer_time --- inst/shiny/modules/xfer_time.R | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/inst/shiny/modules/xfer_time.R b/inst/shiny/modules/xfer_time.R index 3941d5a9b..47b4e8190 100644 --- a/inst/shiny/modules/xfer_time.R +++ b/inst/shiny/modules/xfer_time.R @@ -252,7 +252,6 @@ xfer_time_module_server <- function(input, output, session, common) { 'resolutions >30 arc seconds.')) return() } - if(!all(names(envs()) %in% paste0('bio', sprintf("%02d", 1:19)))) { nonBios <- names(envs())[!names(envs()) %in% paste0('bio', sprintf("%02d", 1:19))] logger %>% @@ -262,6 +261,18 @@ xfer_time_module_server <- function(input, output, session, common) { "). You can not transfer to a New Time.") return() } + if(input$selTime == "") { + logger %>% writeLog(type = 'error', "Please select transfer time period.") + return() + } + if(input$selGCM == "") { + logger %>% writeLog(type = 'error', "Please select global circulation model.") + return() + } + if(input$selRCP == "") { + logger %>% writeLog(type = 'error', "Please select RCP.") + return() + } # DATA #### if (input$selTimeVar == 'worldclim') { From 662452fbdf30af26823da88cbaf12a315e2c9acb Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Mon, 25 Sep 2023 14:35:24 -0400 Subject: [PATCH 21/39] [v2.1.0] removed rgeos, updated team bios, fixed typos & gt --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index bd76e22bb..316d26696 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,7 @@ wallace 2.1.0 - Removed `rgeos` (package expiring) - Updated team bios - Added clarification to occs_queryDb guidance text +- Added error msgs to xfer_time wallace 2.0.6 ============= From 17b0a4b1a5d56eda5865d4150fbc9e278a289b56 Mon Sep 17 00:00:00 2001 From: "Gonzalo E. Pinilla-Buitrago" Date: Mon, 25 Sep 2023 15:52:10 -0600 Subject: [PATCH 22/39] small fix and doc --- inst/shiny/Rmd/text_team.Rmd | 2 +- man/penvs_bgExtent.Rd | 2 +- man/penvs_drawBgExtent.Rd | 6 +++--- man/penvs_userBgExtent.Rd | 2 +- man/xfer_draw.Rd | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/inst/shiny/Rmd/text_team.Rmd b/inst/shiny/Rmd/text_team.Rmd index 9f64ce6e9..bde42c9a5 100644 --- a/inst/shiny/Rmd/text_team.Rmd +++ b/inst/shiny/Rmd/text_team.Rmd @@ -15,7 +15,7 @@ output: html_document gonzalo -Gonzalo E. Pinilla-Buitrago (co-lead developer) received his PhD from the CUNY Graduate Center and City College of New York. He is currently a Postdoctoral Researcher at Yale University. +Gonzalo E. Pinilla-Buitrago (co-lead developer) received his PhD from the CUNY Graduate Center and City College of New York. He is currently a Postdoctoral Researcher at University of Connecticut.
andrea diff --git a/man/penvs_bgExtent.Rd b/man/penvs_bgExtent.Rd index 9cd002e3b..b0c62ac78 100644 --- a/man/penvs_bgExtent.Rd +++ b/man/penvs_bgExtent.Rd @@ -24,7 +24,7 @@ shiny, otherwise leave the default NULL.} Obtain occurrence data. Used to obtain species name for logger messages.} } \value{ -A SpatialPolygonsDataFrame object that contains all occurrences from occs +A SpatialPolygons object that contains all occurrences from occs } \description{ This function generates a background area according to a user- diff --git a/man/penvs_drawBgExtent.Rd b/man/penvs_drawBgExtent.Rd index c57d345ff..11a311aef 100644 --- a/man/penvs_drawBgExtent.Rd +++ b/man/penvs_drawBgExtent.Rd @@ -34,9 +34,9 @@ occs: Obtain occurrence data. Used to obtain species name for logger messages.} } \value{ -This functions returns a SpatialPolygonsDataFrame based on the user -specified coordinates (drawn on map). This SpatialPolygonsDataFrame may be -larger than specified if drawBgBuf > 0. The SpatialPolygonsDataFrame will +This functions returns a SpatialPolygons object based on the user +specified coordinates (drawn on map). This SpatialPolygons object may be +larger than specified if drawBgBuf > 0. The SpatialPolygons object will include all occurrences. } \description{ diff --git a/man/penvs_userBgExtent.Rd b/man/penvs_userBgExtent.Rd index 62128e955..f7c27b6ae 100644 --- a/man/penvs_userBgExtent.Rd +++ b/man/penvs_userBgExtent.Rd @@ -34,7 +34,7 @@ shiny, otherwise leave the default NULL.} } \value{ This function returns a SpatialPolygons object with the user - provided shape (+ a buffer is userBgBuf >0). The polygon will be at least + provided shape (+ a buffer if userBgBuf >0). The polygon will be at least large enough to contain all occurrences. } \description{ diff --git a/man/xfer_draw.Rd b/man/xfer_draw.Rd index 1981436ca..23eabf691 100644 --- a/man/xfer_draw.Rd +++ b/man/xfer_draw.Rd @@ -22,7 +22,7 @@ running in shiny, otherwise leave the default NULL} \item{spN}{character. Used to obtain species name for logger messages} } \value{ -This functions returns a SpatialPolygonsDataFrame based on the user +This functions returns a SpatialPolygons object based on the user specified coordinates (drawn on map). This SpatialPolygonsDataFrame may be larger than specified if drawBgBuf > 0. } From 7070bf699fa422186d4c35ceb8d2ac20df940863 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Tue, 24 Oct 2023 20:37:44 -0400 Subject: [PATCH 23/39] updated webinars on About pg --- inst/shiny/Rmd/text_about.Rmd | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index d8c89ba4f..5ea630800 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -47,15 +47,17 @@ For more information and relevant links see our ENM 2020.* -Kass, J.M. and G.E. Pinilla-Buitrago. 18 May 2020. “Wallace Ecological Modeling Application: flexible and reproducible modeling of species’ niches and distributions built for community expansion.” ENM 2020: Online course in ecological niche modeling (Peterson, A. T. editor), Week 19, Talk 2. Watch on YouTube. +Kass, J.M. and G.E. Pinilla-Buitrago. 18 May 2020. “Wallace Ecological Modeling Application: flexible and reproducible modeling of species’ niches and distributions built for community expansion.” ENM 2020: Online course in ecological niche modeling (Peterson, A. T. editor), Week 19, Talk 2. *The following webinar was the "37th Global Online Biodiversity Informatics Seminar" in the Biodiversity Informatics Training Curriculum organized by Town Peterson.* -Kass, J. M. 9 May 2018. "WALLACE: A flexible platform for reproducible modeling of species niches and distributions built for community expansion." Broadcast from the City College of New York, City University of New York. Watch on YouTube. +Kass, J. M. 9 May 2018. "WALLACE: A flexible platform for reproducible modeling of species niches and distributions built for community expansion." Broadcast from the City College of New York, City University of New York. Global Online Seminar #37 - Wallace. -*The following webinar was part of the "Modelado de Distribuciones Potenciales" series, organized by Angela Cuervo.* +*Para seminarios en español, los siguientes seminarios fueron organizados por Angela Cuervo como parte de las series Modelado de Distribuciones Potenciales y Analisis Espaciales.* -Anderson, R. P. 21 May 2018. "El software Wallace para modelar nichos y distribuciones: Un coche con motor R, volante de ratón y cerebro de humano." Broadcast from the City College of New York, City University of New York. Watch on YouTube. +Paz, A. 3 October 2023. "Wallace EcoMod: Nuevas funcionalidades para aplicaciones en conservación". Seminarios 2023 - Wallace EcoMod + +Anderson, R. P. 21 May 2018. "El software Wallace para modelar nichos y distribuciones: Un coche con motor R, volante de ratón y cerebro de humano." Broadcast from the City College of New York, City University of New York. Analisis espaciales: 2017 - El software Wallace. *For more videos, check out the Wallace EcoMod YouTube channel.* From ef961c9b5b01a641d147963661423a6e0f9b7ef6 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Tue, 24 Oct 2023 21:09:37 -0400 Subject: [PATCH 24/39] added BAJ as developer --- R/penvs_bgExtent.R | 1 + R/penvs_drawBgExtent.R | 1 + R/penvs_userBgExtent.R | 1 + R/xfer_draw.R | 1 + R/xfer_userExtent.R | 1 + inst/shiny/modules/penvs_bgExtent.yml | 2 +- inst/shiny/modules/penvs_drawBgExtent.yml | 2 +- inst/shiny/modules/penvs_userBgExtent.yml | 2 +- inst/shiny/modules/xfer_area.yml | 2 +- inst/shiny/modules/xfer_time.yml | 2 +- inst/shiny/modules/xfer_user.yml | 2 +- 11 files changed, 11 insertions(+), 6 deletions(-) diff --git a/R/penvs_bgExtent.R b/R/penvs_bgExtent.R index 79b31ad97..d96a7d2dd 100644 --- a/R/penvs_bgExtent.R +++ b/R/penvs_bgExtent.R @@ -29,6 +29,7 @@ #' @return A SpatialPolygons object that contains all occurrences from occs #' @author Jamie Kass #' @author Gonzalo E. Pinilla-Buitrago +#' @author Bethany A. Johnson # @note #' @seealso \code{\link{penvs_userBgExtent}}, \code{\link{penvs_drawBgExtent}}, diff --git a/R/penvs_drawBgExtent.R b/R/penvs_drawBgExtent.R index 75c3935eb..5adafa748 100644 --- a/R/penvs_drawBgExtent.R +++ b/R/penvs_drawBgExtent.R @@ -42,6 +42,7 @@ #' @author Jamie Kass #' @author Gonzalo E. Pinilla-Buitrago +#' @author Bethany A. Johnson # @note #' @seealso \code{\link{penvs_userBgExtent}}, \code{\link{penvs_bgExtent}}, #' \code{\link{penvs_bgMask}} , \code{\link{penvs_bgSample}} diff --git a/R/penvs_userBgExtent.R b/R/penvs_userBgExtent.R index 321842339..1c9ecc363 100644 --- a/R/penvs_userBgExtent.R +++ b/R/penvs_userBgExtent.R @@ -39,6 +39,7 @@ #' @author Jamie Kass #' @author Gonzalo E. Pinilla-Buitrago #' @author Andrea Paz +#' @author Bethany A. Johnson # @note #' @seealso \code{\link{penvs_drawBgExtent}}, \code{\link{penvs_bgExtent}}, diff --git a/R/xfer_draw.R b/R/xfer_draw.R index c0819750a..be98e58b9 100644 --- a/R/xfer_draw.R +++ b/R/xfer_draw.R @@ -34,6 +34,7 @@ #' larger than specified if drawBgBuf > 0. #' @author Gonzalo Pinilla +#' @author Bethany A. Johnson # @note #' @seealso \code{\link{xfer_userEnvs}} #' @export diff --git a/R/xfer_userExtent.R b/R/xfer_userExtent.R index fa8dd66d0..08fd5e004 100644 --- a/R/xfer_userExtent.R +++ b/R/xfer_userExtent.R @@ -33,6 +33,7 @@ #' @author Jamie Kass #' @author Gonzalo E. Pinilla-Buitrago #' @author Andrea Paz +#' @author Bethany A. Johnson #' @seealso \code{\link{penvs_drawBgExtent}}, \code{\link{penvs_bgExtent}}, #' \code{\link{penvs_bgMask}} , \code{\link{penvs_bgSample}} #' @export diff --git a/inst/shiny/modules/penvs_bgExtent.yml b/inst/shiny/modules/penvs_bgExtent.yml index 5a4838389..44b1aa9ed 100644 --- a/inst/shiny/modules/penvs_bgExtent.yml +++ b/inst/shiny/modules/penvs_bgExtent.yml @@ -1,5 +1,5 @@ component: "penvs" short_name: "Select Study Region" long_name: "Select Study Region by Extent" -authors: "Jamie M. Kass, Bruno Vilela, Robert P. Anderson" +authors: "Jamie M. Kass, Bruno Vilela, Bethany A. Johnson, Robert P. Anderson" package: [sp, sf] diff --git a/inst/shiny/modules/penvs_drawBgExtent.yml b/inst/shiny/modules/penvs_drawBgExtent.yml index 582f1c05b..802718ba4 100644 --- a/inst/shiny/modules/penvs_drawBgExtent.yml +++ b/inst/shiny/modules/penvs_drawBgExtent.yml @@ -1,5 +1,5 @@ component: "penvs" short_name: "Draw Study Region" long_name: "Draw Study Region" -authors: "Gonzalo E. Pinilla-Buitrago, Jamie M. Kass, Bruno Vilela, Robert P. Anderson" +authors: "Gonzalo E. Pinilla-Buitrago, Jamie M. Kass, Bruno Vilela, Bethany A. Johnson, Robert P. Anderson" package: [] diff --git a/inst/shiny/modules/penvs_userBgExtent.yml b/inst/shiny/modules/penvs_userBgExtent.yml index 721f16649..bf604d1a1 100644 --- a/inst/shiny/modules/penvs_userBgExtent.yml +++ b/inst/shiny/modules/penvs_userBgExtent.yml @@ -1,5 +1,5 @@ component: "penvs" short_name: "User-specified Study Region" long_name: "User-specified Study Region" -authors: "Jamie M. Kass, Bruno Vilela, Robert P. Anderson" +authors: "Jamie M. Kass, Bruno Vilela, Bethany A. Johnson, Robert P. Anderson" package: [] diff --git a/inst/shiny/modules/xfer_area.yml b/inst/shiny/modules/xfer_area.yml index eda4ecb8c..fda7610bd 100644 --- a/inst/shiny/modules/xfer_area.yml +++ b/inst/shiny/modules/xfer_area.yml @@ -1,5 +1,5 @@ component: "xfer" short_name: "Transfer to New Extent" long_name: "Transfer to New Extent" -authors: "Jamie M. Kass, Bruno Vilela, Gonzalo E. Pinilla-Buitrago, Robert P. Anderson" +authors: "Jamie M. Kass, Bruno Vilela, Gonzalo E. Pinilla-Buitrago, Bethany A. Johnson, Robert P. Anderson" package: [dismo] diff --git a/inst/shiny/modules/xfer_time.yml b/inst/shiny/modules/xfer_time.yml index d1bd57972..9408ed7c7 100644 --- a/inst/shiny/modules/xfer_time.yml +++ b/inst/shiny/modules/xfer_time.yml @@ -1,5 +1,5 @@ component: "xfer" short_name: "Transfer to New Time" long_name: "Transfer to New Time" -authors: "Jamie M. Kass, Bruno Vilela, Gonzalo E. Pinilla-Buitrago, Robert P. Anderson" +authors: "Jamie M. Kass, Bruno Vilela, Gonzalo E. Pinilla-Buitrago, Bethany A. Johnson, Robert P. Anderson" package: [dismo] diff --git a/inst/shiny/modules/xfer_user.yml b/inst/shiny/modules/xfer_user.yml index e0b6c7c96..c6e7017a8 100644 --- a/inst/shiny/modules/xfer_user.yml +++ b/inst/shiny/modules/xfer_user.yml @@ -1,5 +1,5 @@ component: "xfer" short_name: "Transfer to User Environments" long_name: "Transfer to User Environments" -authors: "Gonzalo E. Pinilla-Buitrago, Jamie M. Kass, Robert P. Anderson" +authors: "Gonzalo E. Pinilla-Buitrago, Jamie M. Kass, Bethany A. Johnson, Robert P. Anderson" package: [dismo] From bbd4b2c085d9ad29da2125049103c41302e13c9c Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Wed, 25 Oct 2023 20:48:18 -0400 Subject: [PATCH 25/39] updated webinars on About pg --- inst/shiny/Rmd/text_about.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index 5ea630800..5bc29eb48 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -53,7 +53,7 @@ Kass, J.M. and G.E. Pinilla-Buitrago. 18 May 2020. “Wallace Ecological Modelin Kass, J. M. 9 May 2018. "WALLACE: A flexible platform for reproducible modeling of species niches and distributions built for community expansion." Broadcast from the City College of New York, City University of New York. Global Online Seminar #37 - Wallace. -*Para seminarios en español, los siguientes seminarios fueron organizados por Angela Cuervo como parte de las series Modelado de Distribuciones Potenciales y Analisis Espaciales.* +*Para seminarios en español, los siguientes seminarios fueron organizados por Angela Cuervo como parte de la serie Modelado de Distribuciones Potenciales y Analisis Espaciales.* Paz, A. 3 October 2023. "Wallace EcoMod: Nuevas funcionalidades para aplicaciones en conservación". Seminarios 2023 - Wallace EcoMod From 03cba59451c7f1d48ee588d1bab99a0bdec58b35 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 27 Oct 2023 12:05:02 -0400 Subject: [PATCH 26/39] added license --- .Rbuildignore | 1 + LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 675 insertions(+) create mode 100644 LICENSE diff --git a/.Rbuildignore b/.Rbuildignore index b24da4604..689873b25 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -12,3 +12,4 @@ cmip5* # worldclim files ^_pkgdown\.yml$ ^docs$ ^pkgdown$ +^LICENSE$ diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. From 8be62dd8e98f7921a3da16f6f1860d7c1e729ff2 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Wed, 1 Nov 2023 14:56:20 -0400 Subject: [PATCH 27/39] temp fix for Occ Density module (`ecospat.plot.niche()` bug fix) --- NAMESPACE | 1 + R/espace_nicheOv.R | 6 ++-- R/espace_occDens.R | 2 +- R/helper_functions.R | 44 +++++++++++++++++++++++++++ inst/shiny/modules/espace_occDens.R | 4 +-- inst/shiny/modules/espace_occDens.Rmd | 4 +-- inst/shiny/server.R | 4 +-- man/ecospat.plot.nicheDEV.Rd | 29 ++++++++++++++++++ man/espace_nicheOv.Rd | 2 +- man/espace_occDens.Rd | 2 +- man/penvs_bgExtent.Rd | 2 ++ man/penvs_drawBgExtent.Rd | 2 ++ man/penvs_userBgExtent.Rd | 2 ++ man/xfer_draw.Rd | 2 ++ man/xfer_userExtent.Rd | 2 ++ tests/testthat/test_espace_occDens.R | 20 ++++++------ wallace | 0 17 files changed, 106 insertions(+), 22 deletions(-) create mode 100644 man/ecospat.plot.nicheDEV.Rd create mode 100644 wallace diff --git a/NAMESPACE b/NAMESPACE index 27b427c11..074f9abbf 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ export(clearAll) export(create_module) export(ecoClimate_getdata) export(ecoClimate_select) +export(ecospat.plot.nicheDEV) export(envs_ecoClimate) export(envs_userEnvs) export(envs_worldclim) diff --git a/R/espace_nicheOv.R b/R/espace_nicheOv.R index 5e0824d1b..bae7422a8 100644 --- a/R/espace_nicheOv.R +++ b/R/espace_nicheOv.R @@ -54,7 +54,7 @@ #' } #' #' @return A list of 4 elements if all is set to TRUE. Elements are overlap -#' (Schoener's D), USE (ecopstat.niche.dyn.index), equiv and simil. +#' (Schoener's D), USE (ecospat.niche.dyn.index), equiv and simil. #' @author Jamie Kass #' @author Olivier Broennimann #' @seealso \code{\link{espace_pca}} \code{\link{espace_occDens}} @@ -80,7 +80,7 @@ espace_nicheOv <- function(z1, z2, iter = 100, equivalency = FALSE, if (equivalency == TRUE) { smartProgress(logger, message = "Calculating niche equivalency...", { nicheOv$equiv <- ecospat::ecospat.niche.equivalency.test( - z1, z2, iter, overlap.alternative = "higher" + z1, z2, rep = 100, overlap.alternative = "higher" ) }) } @@ -88,7 +88,7 @@ espace_nicheOv <- function(z1, z2, iter = 100, equivalency = FALSE, if (similarity == TRUE) { smartProgress(logger, message = "Calculating niche similarity", { nicheOv$simil <- ecospat::ecospat.niche.similarity.test( - z1, z2, iter, overlap.alternative = "higher", rand.type = 1 + z1, z2, rep = 100, overlap.alternative = "higher", rand.type = 1 ) }) } diff --git a/R/espace_occDens.R b/R/espace_occDens.R index ff4ea0b62..528b03b2c 100644 --- a/R/espace_occDens.R +++ b/R/espace_occDens.R @@ -48,7 +48,7 @@ #' } #' #' @return Returns a list of 2 lists (one for each species). Each list is an -#' ecospat noche object that contains 10 species specific slots with +#' ecospat niche object that contains 10 species specific slots with #' information outputed by ecospat::grid.clim.dyn. z.uncor is the density of #' occurrence of the species and z.cor the occupancy of the environment by #' the species. It has the input parameters as individual slots. diff --git a/R/helper_functions.R b/R/helper_functions.R index 9faa257f2..518771de5 100644 --- a/R/helper_functions.R +++ b/R/helper_functions.R @@ -311,6 +311,50 @@ remEnvsValsNA <- function(occs, occsEnvsVals, spN, logger) { }) } +####################### # +# ESPACE # +####################### # +#' @title ecospat.plot.nicheDEV +#' @description For internal use. Plot occ density +#' @param z A gridclim object for the species distribution created by ecospat.grid.clim.dyn()/espace_occDens(). +#' @param title A title for the plot. +#' @param name.axis1 A label for the first axis. +#' @param name.axis2 A label for the second axis. +#' @param cor Correct the occurrence densities of the species by the prevalence of the environments in its range (TRUE = yes, FALSE = no). +#' @keywords internal +#' @export +ecospat.plot.nicheDEV <- function(z, title = "", name.axis1 = "Axis 1", name.axis2 = "Axis 2", cor = FALSE) { + if (is.null(z$y)) { + R <- length(z$x) + x <- z$x + xx <- sort(rep(1:length(x), 2)) + if (cor == FALSE) + y1 <- z$z.uncor/max(z$z.uncor) + if (cor == TRUE) + y1 <- z$z.cor/max(z$z.cor) + Y1 <- z$Z/max(z$Z) + yy1 <- sort(rep(1:length(y1), 2))[-c(1:2, length(y1) * 2)] + YY1 <- sort(rep(1:length(Y1), 2))[-c(1:2, length(Y1) * 2)] + plot(x, y1, type = "n", xlab = name.axis1, ylab = "density of occurrence") + graphics::polygon(x[xx], c(0, y1[yy1], 0, 0), col = "grey") + graphics::lines(x[xx], c(0, Y1[YY1], 0, 0)) + } + if (!is.null(z$y)) { + if (cor == FALSE) + terra::plot(z$z.uncor,col=grDevices::gray(100:0 / 100),legend=FALSE, xlab = name.axis1, + ylab = name.axis2,mar = c(3.1,3.1,2.1,3.1)) + if (cor == TRUE) + terra::plot(z$z.cor,col=grDevices::gray(100:0 / 100),legend=FALSE, xlab = name.axis1, + ylab = name.axis2,mar = c(3.1,3.1,2.1,3.1)) + terra::contour( + z$Z, add = TRUE, levels = stats::quantile(z$Z[z$Z > 0], c(0, 0.5)), + drawlabels = FALSE, lty = c(1, 2) + ) + } + title(title) +} +# end of espace. BAJ added 10/31/2023 after ecospat.plot.niche() from ecospat 4.0.0 wasn't working + ####################### # # VISUALIZE & TRANSFER # ####################### # diff --git a/inst/shiny/modules/espace_occDens.R b/inst/shiny/modules/espace_occDens.R index 94d47d506..fb517ff61 100644 --- a/inst/shiny/modules/espace_occDens.R +++ b/inst/shiny/modules/espace_occDens.R @@ -66,8 +66,8 @@ espace_occDens_module_server <- function(input, output, session, common) { mSp <- curSp() } req(spp[[mSp]]$occDens) - ecospat::ecospat.plot.niche(spp[[mSp]]$occDens[[sp1]], title = spName(sp1)) - ecospat::ecospat.plot.niche(spp[[mSp]]$occDens[[sp2]], title = spName(sp2)) + ecospat.plot.nicheDEV(spp[[mSp]]$occDens[[sp1]], title = spName(sp1)) + ecospat.plot.nicheDEV(spp[[mSp]]$occDens[[sp2]], title = spName(sp2)) }) } diff --git a/inst/shiny/modules/espace_occDens.Rmd b/inst/shiny/modules/espace_occDens.Rmd index b6c83e40b..948e3f7e0 100644 --- a/inst/shiny/modules/espace_occDens.Rmd +++ b/inst/shiny/modules/espace_occDens.Rmd @@ -11,8 +11,8 @@ espace_occDens_{{multAbr}} <- espace_occDens( pca = espace_pca_{{multAbr}}) # Plots graphics::par(mfrow = c(1,2)) -ecospat::ecospat.plot.niche(espace_occDens_{{multAbr}}[["{{spName1}}"]], +ecospat.plot.nicheDEV(espace_occDens_{{multAbr}}[["{{spName1}}"]], title = "{{spName1}}") -ecospat::ecospat.plot.niche(espace_occDens_{{multAbr}}[["{{spName2}}"]], +ecospat.plot.nicheDEV(espace_occDens_{{multAbr}}[["{{spName2}}"]], title = "{{spName2}}") ``` diff --git a/inst/shiny/server.R b/inst/shiny/server.R index bbdd4dfc3..81b6be861 100644 --- a/inst/shiny/server.R +++ b/inst/shiny/server.R @@ -521,8 +521,8 @@ function(input, output, session) { mSp <- curSp() } req(spp[[mSp]]$occDens) - ecospat::ecospat.plot.niche(spp[[mSp]]$occDens[[sp1]], title = spName(sp1)) - ecospat::ecospat.plot.niche(spp[[mSp]]$occDens[[sp2]], title = spName(sp2)) + ecospat.plot.nicheDEV(spp[[mSp]]$occDens[[sp1]], title = spName(sp1)) + ecospat.plot.nicheDEV(spp[[mSp]]$occDens[[sp2]], title = spName(sp2)) dev.off() } ) diff --git a/man/ecospat.plot.nicheDEV.Rd b/man/ecospat.plot.nicheDEV.Rd new file mode 100644 index 000000000..dd6470efd --- /dev/null +++ b/man/ecospat.plot.nicheDEV.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/helper_functions.R +\name{ecospat.plot.nicheDEV} +\alias{ecospat.plot.nicheDEV} +\title{ecospat.plot.nicheDEV} +\usage{ +ecospat.plot.nicheDEV( + z, + title = "", + name.axis1 = "Axis 1", + name.axis2 = "Axis 2", + cor = FALSE +) +} +\arguments{ +\item{z}{A gridclim object for the species distribution created by ecospat.grid.clim.dyn()/espace_occDens().} + +\item{title}{A title for the plot.} + +\item{name.axis1}{A label for the first axis.} + +\item{name.axis2}{A label for the second axis.} + +\item{cor}{Correct the occurrence densities of the species by the prevalence of the environments in its range (TRUE = yes, FALSE = no).} +} +\description{ +For internal use. Plot occ density +} +\keyword{internal} diff --git a/man/espace_nicheOv.Rd b/man/espace_nicheOv.Rd index aca88242e..6e905998c 100644 --- a/man/espace_nicheOv.Rd +++ b/man/espace_nicheOv.Rd @@ -30,7 +30,7 @@ shiny, otherwise leave the default NULL.} } \value{ A list of 4 elements if all is set to TRUE. Elements are overlap - (Schoener's D), USE (ecopstat.niche.dyn.index), equiv and simil. + (Schoener's D), USE (ecospat.niche.dyn.index), equiv and simil. } \description{ Function evaluates niche overlap between the two species for diff --git a/man/espace_occDens.Rd b/man/espace_occDens.Rd index 31e504446..e686cd2ba 100644 --- a/man/espace_occDens.Rd +++ b/man/espace_occDens.Rd @@ -19,7 +19,7 @@ shiny, otherwise leave the default NULL.} } \value{ Returns a list of 2 lists (one for each species). Each list is an - ecospat noche object that contains 10 species specific slots with + ecospat niche object that contains 10 species specific slots with information outputed by ecospat::grid.clim.dyn. z.uncor is the density of occurrence of the species and z.cor the occupancy of the environment by the species. It has the input parameters as individual slots. diff --git a/man/penvs_bgExtent.Rd b/man/penvs_bgExtent.Rd index b0c62ac78..dae0893f9 100644 --- a/man/penvs_bgExtent.Rd +++ b/man/penvs_bgExtent.Rd @@ -52,4 +52,6 @@ bgExt <- penvs_bgExtent(occs, bgSel = 'bounding box', bgBuf = 0.5) Jamie Kass Gonzalo E. Pinilla-Buitrago + +Bethany A. Johnson } diff --git a/man/penvs_drawBgExtent.Rd b/man/penvs_drawBgExtent.Rd index 11a311aef..80e84b6da 100644 --- a/man/penvs_drawBgExtent.Rd +++ b/man/penvs_drawBgExtent.Rd @@ -71,4 +71,6 @@ drawBgBf <- penvs_drawBgExtent(polyExtXY = expertDrawPoly, polyExtID = 1, Jamie Kass Gonzalo E. Pinilla-Buitrago + +Bethany A. Johnson } diff --git a/man/penvs_userBgExtent.Rd b/man/penvs_userBgExtent.Rd index f7c27b6ae..1de10e7a4 100644 --- a/man/penvs_userBgExtent.Rd +++ b/man/penvs_userBgExtent.Rd @@ -71,4 +71,6 @@ Jamie Kass Gonzalo E. Pinilla-Buitrago Andrea Paz + +Bethany A. Johnson } diff --git a/man/xfer_draw.Rd b/man/xfer_draw.Rd index 23eabf691..460debb8f 100644 --- a/man/xfer_draw.Rd +++ b/man/xfer_draw.Rd @@ -54,4 +54,6 @@ polygonTest <- xfer_draw(polyXfXY = userDrawPoly, polyXfID, } \author{ Gonzalo Pinilla + +Bethany A. Johnson } diff --git a/man/xfer_userExtent.Rd b/man/xfer_userExtent.Rd index 561d1b17c..d4266e8fc 100644 --- a/man/xfer_userExtent.Rd +++ b/man/xfer_userExtent.Rd @@ -57,4 +57,6 @@ Jamie Kass Gonzalo E. Pinilla-Buitrago Andrea Paz + +Bethany A. Johnson } diff --git a/tests/testthat/test_espace_occDens.R b/tests/testthat/test_espace_occDens.R index e4719f155..6ed2b0e99 100644 --- a/tests/testthat/test_espace_occDens.R +++ b/tests/testthat/test_espace_occDens.R @@ -52,17 +52,17 @@ test_that("output checks", { ## Test that all outputs but x and y and inputs (including occupancy, density ## and weights) are all raster layers #sp1 - expect_is(TestOccDens[[sp.name1]]$z,'RasterLayer') - expect_is(TestOccDens[[sp.name1]]$Z,'RasterLayer') - expect_is(TestOccDens[[sp.name1]]$z.uncor,'RasterLayer') - expect_is(TestOccDens[[sp.name1]]$z.cor,'RasterLayer') - expect_is(TestOccDens[[sp.name1]]$w,'RasterLayer') + expect_is(TestOccDens[[sp.name1]]$z,'SpatRaster') + expect_is(TestOccDens[[sp.name1]]$Z,'SpatRaster') + expect_is(TestOccDens[[sp.name1]]$z.uncor,'SpatRaster') + expect_is(TestOccDens[[sp.name1]]$z.cor,'SpatRaster') + expect_is(TestOccDens[[sp.name1]]$w,'SpatRaster') #sp2 - expect_is(TestOccDens[[sp.name2]]$z,'RasterLayer') - expect_is(TestOccDens[[sp.name2]]$Z,'RasterLayer') - expect_is(TestOccDens[[sp.name2]]$z.uncor,'RasterLayer') - expect_is(TestOccDens[[sp.name2]]$z.cor,'RasterLayer') - expect_is(TestOccDens[[sp.name2]]$w,'RasterLayer') + expect_is(TestOccDens[[sp.name2]]$z,'SpatRaster') + expect_is(TestOccDens[[sp.name2]]$Z,'SpatRaster') + expect_is(TestOccDens[[sp.name2]]$z.uncor,'SpatRaster') + expect_is(TestOccDens[[sp.name2]]$z.cor,'SpatRaster') + expect_is(TestOccDens[[sp.name2]]$w,'SpatRaster') }) diff --git a/wallace b/wallace new file mode 100644 index 000000000..e69de29bb From ff97f247e875c8e97600ab3a1e4e8894aa728d72 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Tue, 5 Dec 2023 12:39:06 -0500 Subject: [PATCH 28/39] change maintainer from GEPB to MB --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index ea48ba86a..deb19314f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -13,14 +13,14 @@ Description: The 'shiny' application Wallace is a modular platform for website: . Authors@R: c(person("Jamie M.", "Kass", email = "jamie.kass@oist.jp", role = "aut"), - person("Gonzalo E.", "Pinilla-Buitrago", email = "gepinillab@gmail.com", role = c("aut", "cre")), + person("Gonzalo E.", "Pinilla-Buitrago", email = "gepinillab@gmail.com", role = "aut"), person("Andrea", "Paz", email = "paz.andreita@gmail.com", role = "aut"), person("Bethany A.", "Johnson", email = "bjohnso005@citymail.cuny.edu", role = "aut"), person("Valentina", "Grisales-Betancur", email = "vgrisale@eafit.edu.co", role = "aut"), person("Dean", "Attali", email = "daattali@gmail.com", role = "aut"), person("Matthew E.", "Aiello-Lammens", email = "matt.lammens@gmail.com", role = "aut"), person("Cory", "Merow", email = "corymerow@gmail.com", role = "aut"), - person("Mary E.", "Blair", email = "mblair1@amnh.org", role = "aut"), + person("Mary E.", "Blair", email = "mblair1@amnh.org", role = c("aut", "cre")), person("Robert P.", "Anderson", email = "randerson@ccny.cuny.edu", role = "aut"), person("Sarah I.", "Meenan", email = "sarah.meenan@gmail.com", role = "ctb"), person("Olivier", "Broennimann", email = "olivier.broennimann@unil.ch", role = "ctb"), From 9e08e2c2fb5c79548b6261d09d4ed206fd22a883 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Tue, 5 Dec 2023 13:51:17 -0500 Subject: [PATCH 29/39] [v2.1.1] ecospat bug fix, add license, update maintainer --- DESCRIPTION | 4 ++-- NEWS.md | 6 ++++++ README.md | 4 ++-- inst/shiny/Rmd/text_about.Rmd | 2 +- inst/shiny/Rmd/text_intro_tab.Rmd | 2 +- inst/shiny/Rmd/userReport_intro.Rmd | 2 +- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index deb19314f..71785f98b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wallace -Version: 2.1.0 -Date: 2023-09-25 +Version: 2.1.1 +Date: 2023-12-05 Title: A Modular Platform for Reproducible Modeling of Species Niches and Distributions Description: The 'shiny' application Wallace is a modular platform for diff --git a/NEWS.md b/NEWS.md index 316d26696..15bec38d4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +wallace 2.1.1 +============= +- Fixed bug in occ density grid & niche overlap +- Updated licensing +- Updated developers & pkg maintainer + wallace 2.1.0 ============= - Removed `rgeos` (package expiring) diff --git a/README.md b/README.md index fbeab92da..468332ea6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![R-CMD-check](https://github.com/wallaceEcoMod/wallace/workflows/R-CMD-check/badge.svg)](https://github.com/wallaceEcoMod/wallace/actions) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![CRAN version](http://www.r-pkg.org/badges/version/wallace)](https://CRAN.R-project.org/package=wallace) [![downloads](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange)](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange) -# Wallace (v2.1.0) +# Wallace (v2.1.1) *Wallace* is a modular platform for reproducible modeling of species niches and distributions, written in R. The application guides users through a complete analysis, from the acquisition of data to visualizing model predictions on an interactive map, thus bundling complex workflows into a single, streamlined interface. @@ -27,7 +27,7 @@ run_wallace() Please make sure you have installed the latest versions of both R (Mac OS, Windows) and RStudio (Mac OS / Windows: choose the free version). #### How to run Maxent with maxent.jar -*Wallace* v2.1.0 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. +*Wallace* v2.1.1 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. ### Potential Issues diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index 5bc29eb48..553846038 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -7,7 +7,7 @@ output: html_document logo -Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.1.0) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. +Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2.1.1) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. The application is written in `R` with the web app development package `shiny`. Please find the stable version of *Wallace* on CRAN, and the development version on Github. We also maintain a *Wallace* website that has some basic info, links, and will be updated with tutorial materials in the near future. diff --git a/inst/shiny/Rmd/text_intro_tab.Rmd b/inst/shiny/Rmd/text_intro_tab.Rmd index 4d1cd6f53..d8f64e53b 100644 --- a/inst/shiny/Rmd/text_intro_tab.Rmd +++ b/inst/shiny/Rmd/text_intro_tab.Rmd @@ -5,7 +5,7 @@ output: html_document #### WORKFLOW -*Wallace* (v2.1.0) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. +*Wallace* (v2.1.1) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. **Components:** diff --git a/inst/shiny/Rmd/userReport_intro.Rmd b/inst/shiny/Rmd/userReport_intro.Rmd index 0db7bac57..06373e827 100644 --- a/inst/shiny/Rmd/userReport_intro.Rmd +++ b/inst/shiny/Rmd/userReport_intro.Rmd @@ -10,7 +10,7 @@ knit_engines$set(asis = function(options) { knitr::opts_chunk$set(message = FALSE, warning = FALSE, eval = FALSE) ``` -Please find below the R code history from your *Wallace* v2.1.0 session. +Please find below the R code history from your *Wallace* v2.1.1 session. You can reproduce your session results by running this R Markdown file in RStudio. From 65039a165df0bad0af64c6d757792bcd67c20ac8 Mon Sep 17 00:00:00 2001 From: Daniel Lopez Date: Wed, 6 Dec 2023 15:21:26 -0500 Subject: [PATCH 30/39] Add license text to .R files --- R/custom_modules.R | 23 +++++++++++++++++++++++ R/envs_ecoClimate.R | 23 +++++++++++++++++++++++ R/envs_userEnvs.R | 23 +++++++++++++++++++++++ R/envs_worldclim.R | 23 +++++++++++++++++++++++ R/espace_nicheOv.R | 23 +++++++++++++++++++++++ R/espace_occDens.R | 23 +++++++++++++++++++++++ R/espace_pca.R | 23 +++++++++++++++++++++++ R/helper_functions.R | 23 +++++++++++++++++++++++ R/model_bioclim.R | 23 +++++++++++++++++++++++ R/model_maxent.R | 23 +++++++++++++++++++++++ R/occs_paleoDb.R | 23 +++++++++++++++++++++++ R/occs_queryDb.R | 23 +++++++++++++++++++++++ R/occs_userOccs.R | 23 +++++++++++++++++++++++ R/part_partitionOccs.R | 23 +++++++++++++++++++++++ R/penvs_bgExtent.R | 23 +++++++++++++++++++++++ R/penvs_bgMask.R | 23 +++++++++++++++++++++++ R/penvs_bgSample.R | 23 +++++++++++++++++++++++ R/penvs_drawBgExtent.R | 23 +++++++++++++++++++++++ R/penvs_userBgExtent.R | 23 +++++++++++++++++++++++ R/poccs_removeByID.R | 23 +++++++++++++++++++++++ R/poccs_selectOccs.R | 23 +++++++++++++++++++++++ R/poccs_thinOccs.R | 23 +++++++++++++++++++++++ R/run_wallace.R | 23 +++++++++++++++++++++++ R/vis_bioclimPlot.R | 23 +++++++++++++++++++++++ R/wallace-package.R | 23 +++++++++++++++++++++++ R/xfer_area.R | 23 +++++++++++++++++++++++ R/xfer_draw.R | 23 +++++++++++++++++++++++ R/xfer_mess.R | 23 +++++++++++++++++++++++ R/xfer_time.R | 23 +++++++++++++++++++++++ R/xfer_userEnvs.R | 23 +++++++++++++++++++++++ R/xfer_userExtent.R | 23 +++++++++++++++++++++++ inst/shiny/global.R | 23 +++++++++++++++++++++++ inst/shiny/helpers.R | 23 +++++++++++++++++++++++ inst/shiny/modules/envs_ecoclimate.R | 23 +++++++++++++++++++++++ inst/shiny/modules/envs_userEnvs.R | 23 +++++++++++++++++++++++ inst/shiny/modules/envs_worldclim.R | 23 +++++++++++++++++++++++ inst/shiny/modules/espace_nicheOv.R | 23 +++++++++++++++++++++++ inst/shiny/modules/espace_occDens.R | 23 +++++++++++++++++++++++ inst/shiny/modules/espace_pca.R | 23 +++++++++++++++++++++++ inst/shiny/modules/model_bioclim.R | 23 +++++++++++++++++++++++ inst/shiny/modules/model_maxent.R | 23 +++++++++++++++++++++++ inst/shiny/modules/occs_paleoDb.R | 23 +++++++++++++++++++++++ inst/shiny/modules/occs_queryDb.R | 23 +++++++++++++++++++++++ inst/shiny/modules/occs_userOccs.R | 23 +++++++++++++++++++++++ inst/shiny/modules/part_nonSpat.R | 23 +++++++++++++++++++++++ inst/shiny/modules/part_spat.R | 23 +++++++++++++++++++++++ inst/shiny/modules/penvs_bgExtent.R | 23 +++++++++++++++++++++++ inst/shiny/modules/penvs_drawBgExtent.R | 23 +++++++++++++++++++++++ inst/shiny/modules/penvs_userBgExtent.R | 23 +++++++++++++++++++++++ inst/shiny/modules/poccs_removeByID.R | 23 +++++++++++++++++++++++ inst/shiny/modules/poccs_selectOccs.R | 23 +++++++++++++++++++++++ inst/shiny/modules/poccs_thinOccs.R | 23 +++++++++++++++++++++++ inst/shiny/modules/rep_markdown.R | 23 +++++++++++++++++++++++ inst/shiny/modules/rep_refPackages.R | 23 +++++++++++++++++++++++ inst/shiny/modules/rep_rmms.R | 23 +++++++++++++++++++++++ inst/shiny/modules/vis_bioclimPlot.R | 23 +++++++++++++++++++++++ inst/shiny/modules/vis_mapPreds.R | 23 +++++++++++++++++++++++ inst/shiny/modules/vis_maxentEvalPlot.R | 23 +++++++++++++++++++++++ inst/shiny/modules/vis_responsePlot.R | 23 +++++++++++++++++++++++ inst/shiny/modules/xfer_area.R | 23 +++++++++++++++++++++++ inst/shiny/modules/xfer_mess.R | 23 +++++++++++++++++++++++ inst/shiny/modules/xfer_time.R | 23 +++++++++++++++++++++++ inst/shiny/modules/xfer_user.R | 23 +++++++++++++++++++++++ inst/shiny/server.R | 23 +++++++++++++++++++++++ inst/shiny/ui.R | 23 +++++++++++++++++++++++ 65 files changed, 1495 insertions(+) diff --git a/R/custom_modules.R b/R/custom_modules.R index 3a0268275..efb6c4a2b 100644 --- a/R/custom_modules.R +++ b/R/custom_modules.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# custom_modules.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' Register a Wallace module #' #' Before running the Wallace application with \code{run_wallace()}, you can diff --git a/R/envs_ecoClimate.R b/R/envs_ecoClimate.R index ad6ad5110..298c91c99 100644 --- a/R/envs_ecoClimate.R +++ b/R/envs_ecoClimate.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# envs_ecoClimate.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title envs_ecoClimate Obtain ecoClimate variables #' @description download ecoClimate variables. See www.ecoclimate.org. diff --git a/R/envs_userEnvs.R b/R/envs_userEnvs.R index 0d42e7756..b2c52ea29 100644 --- a/R/envs_userEnvs.R +++ b/R/envs_userEnvs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# envs_userEnvs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' #' @title envs_userEnvs #' @description Load user provided rasters diff --git a/R/envs_worldclim.R b/R/envs_worldclim.R index 1914cf086..8d5f7c267 100644 --- a/R/envs_worldclim.R +++ b/R/envs_worldclim.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# envs_worldclim.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title envs_worldclim Obtain WorldClim variables #' @description download WorldClim variables. See www.worldclim.com. #' diff --git a/R/espace_nicheOv.R b/R/espace_nicheOv.R index bae7422a8..8d03a448b 100644 --- a/R/espace_nicheOv.R +++ b/R/espace_nicheOv.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# espace_nicheOv.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title espace_nicheOv Niche Overlap #' @description Function evaluates niche overlap between the two species for #' which the occurrence density grid was computed diff --git a/R/espace_occDens.R b/R/espace_occDens.R index 528b03b2c..ae7845b53 100644 --- a/R/espace_occDens.R +++ b/R/espace_occDens.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# espace_occDens.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title Occurrence density grid #' @description calculates the part of environmental space more densely diff --git a/R/espace_pca.R b/R/espace_pca.R index 7c27992f8..662206cec 100644 --- a/R/espace_pca.R +++ b/R/espace_pca.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# espace_pca.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title espace_pca Principal component analysis #' @description Principal component analysis to reduce dimensionality of #' environmental space diff --git a/R/helper_functions.R b/R/helper_functions.R index 518771de5..f40f706e7 100644 --- a/R/helper_functions.R +++ b/R/helper_functions.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# helper_functions.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# ####################### # # MISC # ####################### # diff --git a/R/model_bioclim.R b/R/model_bioclim.R index e3f70d593..7aa91812d 100644 --- a/R/model_bioclim.R +++ b/R/model_bioclim.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# model_bioclim.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title model_bioclim Generate Bioclim model #' @description The function generates a BIOCLIM model using diff --git a/R/model_maxent.R b/R/model_maxent.R index 9d33c891a..82c00e28c 100644 --- a/R/model_maxent.R +++ b/R/model_maxent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# model_maxent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title model_maxent Generate maxent.jar or maxnet model #' @description This functions generates maxent.jar or maxnet models using diff --git a/R/occs_paleoDb.R b/R/occs_paleoDb.R index 0bfdbd301..e340122e6 100644 --- a/R/occs_paleoDb.R +++ b/R/occs_paleoDb.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# occs_paleoDb.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' #' @title `occs_paleoDb` query paleobioDB database #' #' @description #' #' query paleobioDB database and returns the complete list of data, data with diff --git a/R/occs_queryDb.R b/R/occs_queryDb.R index d04823066..7f873e961 100644 --- a/R/occs_queryDb.R +++ b/R/occs_queryDb.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# occs_queryDb.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' occs_queryDb Query online database for species occurrence records. #' #' @description Queries a given database for occurrence data on the provided species diff --git a/R/occs_userOccs.R b/R/occs_userOccs.R index 9fbeac9e3..0032b0997 100644 --- a/R/occs_userOccs.R +++ b/R/occs_userOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# occs_userOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title occs_userOccs Loads user provided occurrence records #' @description #' Load user database with species occurrence records. Returns a list of lists, diff --git a/R/part_partitionOccs.R b/R/part_partitionOccs.R index 7dcdd433c..287f809cf 100644 --- a/R/part_partitionOccs.R +++ b/R/part_partitionOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# part_partitionOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title part_partitionOccs Partition occurrence data #' @description This function partitions occurrence data and background points diff --git a/R/penvs_bgExtent.R b/R/penvs_bgExtent.R index d96a7d2dd..4349cbb9c 100644 --- a/R/penvs_bgExtent.R +++ b/R/penvs_bgExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_bgExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title penvs_bgExtent Generate background extent #' @description This function generates a background area according to a user- diff --git a/R/penvs_bgMask.R b/R/penvs_bgMask.R index 7e5e30035..5e491719e 100644 --- a/R/penvs_bgMask.R +++ b/R/penvs_bgMask.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_bgMask.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title penvs_bgMask Mask environmental data #' @description This functions crops and masks the environmental data to the diff --git a/R/penvs_bgSample.R b/R/penvs_bgSample.R index 9eabf18af..514537a39 100644 --- a/R/penvs_bgSample.R +++ b/R/penvs_bgSample.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_bgSample.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title penvs_bgSample Sample background points #' @description This function samples background points from an area determined diff --git a/R/penvs_drawBgExtent.R b/R/penvs_drawBgExtent.R index 5adafa748..9475d3995 100644 --- a/R/penvs_drawBgExtent.R +++ b/R/penvs_drawBgExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_drawBgExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title penvs_drawBgExtent: Draw background extent #' @description This function generates a background area according to a user #' drawn polygon and provided buffer. diff --git a/R/penvs_userBgExtent.R b/R/penvs_userBgExtent.R index 1c9ecc363..ed5b37a2a 100644 --- a/R/penvs_userBgExtent.R +++ b/R/penvs_userBgExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_userBgExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title penvs_userBgExtent: user provided background extent #' @description This function generates a background area according to a user #' provided polygon and buffer. diff --git a/R/poccs_removeByID.R b/R/poccs_removeByID.R index 67fd19671..d650188ae 100644 --- a/R/poccs_removeByID.R +++ b/R/poccs_removeByID.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# poccs_removeByID.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title poccs_removeByID Remove occurrence by ID #' @description This function removes user selected occurrences by ID. diff --git a/R/poccs_selectOccs.R b/R/poccs_selectOccs.R index cd50a787c..e7b85513e 100644 --- a/R/poccs_selectOccs.R +++ b/R/poccs_selectOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# poccs_selectOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title poccs_selectOccs Remove occurrences outside of polygon #' @description This function removes occurrences outside of a user created #' polygon. diff --git a/R/poccs_thinOccs.R b/R/poccs_thinOccs.R index 8b1a09b33..96312fb6e 100644 --- a/R/poccs_thinOccs.R +++ b/R/poccs_thinOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# poccs_thinOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title poocs_thinOccs Thin occurrences #' @description The function thins the observed occurrences by a user provided diff --git a/R/run_wallace.R b/R/run_wallace.R index 94520d594..f8818109e 100644 --- a/R/run_wallace.R +++ b/R/run_wallace.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# run_wallace.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title Run \emph{Wallace} Application #' @description This function runs the \emph{Wallace} application in the user's #' default web browser. diff --git a/R/vis_bioclimPlot.R b/R/vis_bioclimPlot.R index e040ef0f5..019a19920 100644 --- a/R/vis_bioclimPlot.R +++ b/R/vis_bioclimPlot.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# vis_bioclimPlot.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title vis_bioclimPlot Visualize bivariate plot of BIOCLIM model #' @description diff --git a/R/wallace-package.R b/R/wallace-package.R index 16ce28758..674cf5349 100644 --- a/R/wallace-package.R +++ b/R/wallace-package.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# wallace-package.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @name wallace-package #' @aliases wallace #' @aliases wallace-package diff --git a/R/xfer_area.R b/R/xfer_area.R index 104772d65..6e09f81cc 100644 --- a/R/xfer_area.R +++ b/R/xfer_area.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_area.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title xfer_area Transfer model to a new area #' @description Function transfers the model generated in previous components to diff --git a/R/xfer_draw.R b/R/xfer_draw.R index be98e58b9..bb3e3d4a0 100644 --- a/R/xfer_draw.R +++ b/R/xfer_draw.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_draw.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title xfer_draw Draw extent of transfer #' @description This function creates a polygon object from coordinates of user diff --git a/R/xfer_mess.R b/R/xfer_mess.R index d8d033d9b..95b098411 100644 --- a/R/xfer_mess.R +++ b/R/xfer_mess.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_mess.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title xfer_mess generate MESS map for transferred raster #' @description This function generates a MESS map for the new variables for diff --git a/R/xfer_time.R b/R/xfer_time.R index 16ee0af8c..25b09951f 100644 --- a/R/xfer_time.R +++ b/R/xfer_time.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_time.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title xfer_time Transfer model to a new time #' @description Function transfers the model generated in previous components to diff --git a/R/xfer_userEnvs.R b/R/xfer_userEnvs.R index 7fe6ab583..4d32dcb8c 100644 --- a/R/xfer_userEnvs.R +++ b/R/xfer_userEnvs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_userEnvs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title xfer_userEnvs Transfer model to user specified area and time #' @description The function transfers the model generated in previous components #' to user uploaded environmental variables. diff --git a/R/xfer_userExtent.R b/R/xfer_userExtent.R index 08fd5e004..45c207453 100644 --- a/R/xfer_userExtent.R +++ b/R/xfer_userExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_userExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# #' @title xfer_userExtent: user provided extent of transfer #' @description This function generates an area of transfer according to a user #' provided polygon and buffer. diff --git a/inst/shiny/global.R b/inst/shiny/global.R index 6b1a9b884..e5561253e 100644 --- a/inst/shiny/global.R +++ b/inst/shiny/global.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# global.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# library(wallace) library(glue) diff --git a/inst/shiny/helpers.R b/inst/shiny/helpers.R index 480f93c30..e67ec76df 100644 --- a/inst/shiny/helpers.R +++ b/inst/shiny/helpers.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# helpers.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# uiTop <- function(mod_INFO) { modID <- mod_INFO$modID modName <- mod_INFO$modName diff --git a/inst/shiny/modules/envs_ecoclimate.R b/inst/shiny/modules/envs_ecoclimate.R index 50ec04089..e03f1b7e0 100644 --- a/inst/shiny/modules/envs_ecoclimate.R +++ b/inst/shiny/modules/envs_ecoclimate.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# envs_ecoclimate.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# envs_ecoclimate_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/envs_userEnvs.R b/inst/shiny/modules/envs_userEnvs.R index f18e25df7..c8e6a18f3 100644 --- a/inst/shiny/modules/envs_userEnvs.R +++ b/inst/shiny/modules/envs_userEnvs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# envs_userEnvs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# envs_userEnvs_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/envs_worldclim.R b/inst/shiny/modules/envs_worldclim.R index 1dbbb89fb..7e6159627 100644 --- a/inst/shiny/modules/envs_worldclim.R +++ b/inst/shiny/modules/envs_worldclim.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# envs_worldclim.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# envs_worldclim_module_ui <- function(id) { ns <- NS(id) tagList( diff --git a/inst/shiny/modules/espace_nicheOv.R b/inst/shiny/modules/espace_nicheOv.R index 527a0d897..93beaf24e 100644 --- a/inst/shiny/modules/espace_nicheOv.R +++ b/inst/shiny/modules/espace_nicheOv.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# espace_nicheOv.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# espace_nicheOv_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/espace_occDens.R b/inst/shiny/modules/espace_occDens.R index fb517ff61..2fe2e72ba 100644 --- a/inst/shiny/modules/espace_occDens.R +++ b/inst/shiny/modules/espace_occDens.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# espace_occDens.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# espace_occDens_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/espace_pca.R b/inst/shiny/modules/espace_pca.R index d0fad57f0..e9429688c 100644 --- a/inst/shiny/modules/espace_pca.R +++ b/inst/shiny/modules/espace_pca.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# espace_pca.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# espace_pca_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/model_bioclim.R b/inst/shiny/modules/model_bioclim.R index e3c5bdd9a..c401a62d2 100644 --- a/inst/shiny/modules/model_bioclim.R +++ b/inst/shiny/modules/model_bioclim.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# model_bioclim.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# model_bioclim_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/model_maxent.R b/inst/shiny/modules/model_maxent.R index 99af4ddd9..023112a3e 100644 --- a/inst/shiny/modules/model_maxent.R +++ b/inst/shiny/modules/model_maxent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# model_maxent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# model_maxent_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/occs_paleoDb.R b/inst/shiny/modules/occs_paleoDb.R index 9bc02a0ce..1016ee063 100644 --- a/inst/shiny/modules/occs_paleoDb.R +++ b/inst/shiny/modules/occs_paleoDb.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# occs_paleoDb.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# # occs_paleoDb_module_ui <- function(id) { # ns <- shiny::NS(id) # tagList( diff --git a/inst/shiny/modules/occs_queryDb.R b/inst/shiny/modules/occs_queryDb.R index fe816d014..c9ab86a81 100644 --- a/inst/shiny/modules/occs_queryDb.R +++ b/inst/shiny/modules/occs_queryDb.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# occs_queryDb.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# occs_queryDb_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/occs_userOccs.R b/inst/shiny/modules/occs_userOccs.R index 06aece88b..4ed478f79 100644 --- a/inst/shiny/modules/occs_userOccs.R +++ b/inst/shiny/modules/occs_userOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# occs_userOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# occs_userOccs_module_ui <- function(id) { ns <- NS(id) tagList( diff --git a/inst/shiny/modules/part_nonSpat.R b/inst/shiny/modules/part_nonSpat.R index daa76e5a3..5b6ac090f 100644 --- a/inst/shiny/modules/part_nonSpat.R +++ b/inst/shiny/modules/part_nonSpat.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# part_nonSpat.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# part_nonSpat_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/part_spat.R b/inst/shiny/modules/part_spat.R index 886a7a9bb..ff4ab7adb 100644 --- a/inst/shiny/modules/part_spat.R +++ b/inst/shiny/modules/part_spat.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# part_spat.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# part_spat_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/penvs_bgExtent.R b/inst/shiny/modules/penvs_bgExtent.R index 0b9db46f2..b3f755ca4 100644 --- a/inst/shiny/modules/penvs_bgExtent.R +++ b/inst/shiny/modules/penvs_bgExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_bgExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# penvs_bgExtent_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/penvs_drawBgExtent.R b/inst/shiny/modules/penvs_drawBgExtent.R index 30e9c871a..7c3d7145e 100644 --- a/inst/shiny/modules/penvs_drawBgExtent.R +++ b/inst/shiny/modules/penvs_drawBgExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_drawBgExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# penvs_drawBgExtent_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/penvs_userBgExtent.R b/inst/shiny/modules/penvs_userBgExtent.R index 5711943d0..dfd066dc4 100644 --- a/inst/shiny/modules/penvs_userBgExtent.R +++ b/inst/shiny/modules/penvs_userBgExtent.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# penvs_userBgExtent.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# penvs_userBgExtent_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/poccs_removeByID.R b/inst/shiny/modules/poccs_removeByID.R index 2013cdd63..e6158cfaa 100644 --- a/inst/shiny/modules/poccs_removeByID.R +++ b/inst/shiny/modules/poccs_removeByID.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# poccs_removeByID.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# poccs_removeByID_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/poccs_selectOccs.R b/inst/shiny/modules/poccs_selectOccs.R index e560f67b0..87838f3c5 100644 --- a/inst/shiny/modules/poccs_selectOccs.R +++ b/inst/shiny/modules/poccs_selectOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# poccs_selectOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# poccs_selectOccs_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/poccs_thinOccs.R b/inst/shiny/modules/poccs_thinOccs.R index 23a723850..c0540c3ad 100644 --- a/inst/shiny/modules/poccs_thinOccs.R +++ b/inst/shiny/modules/poccs_thinOccs.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# poccs_thinOccs.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# poccs_thinOccs_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/rep_markdown.R b/inst/shiny/modules/rep_markdown.R index 898435a3a..186d8757c 100644 --- a/inst/shiny/modules/rep_markdown.R +++ b/inst/shiny/modules/rep_markdown.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# rep_markdown.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# rep_markdown_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/rep_refPackages.R b/inst/shiny/modules/rep_refPackages.R index 43cb1693a..e1ce1c451 100644 --- a/inst/shiny/modules/rep_refPackages.R +++ b/inst/shiny/modules/rep_refPackages.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# rep_refPackages.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# rep_refPackages_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/rep_rmms.R b/inst/shiny/modules/rep_rmms.R index 8a4bd7050..8ddfd9fcc 100644 --- a/inst/shiny/modules/rep_rmms.R +++ b/inst/shiny/modules/rep_rmms.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# rep_rmms.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# rep_rmms_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/vis_bioclimPlot.R b/inst/shiny/modules/vis_bioclimPlot.R index 86efa5a6a..d72fefbe7 100644 --- a/inst/shiny/modules/vis_bioclimPlot.R +++ b/inst/shiny/modules/vis_bioclimPlot.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# vis_bioclimPlot.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# vis_bioclimPlot_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/vis_mapPreds.R b/inst/shiny/modules/vis_mapPreds.R index df37af386..be8a1f4fa 100644 --- a/inst/shiny/modules/vis_mapPreds.R +++ b/inst/shiny/modules/vis_mapPreds.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# vis_mapPreds.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# vis_mapPreds_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/vis_maxentEvalPlot.R b/inst/shiny/modules/vis_maxentEvalPlot.R index befee1a80..49c113d04 100644 --- a/inst/shiny/modules/vis_maxentEvalPlot.R +++ b/inst/shiny/modules/vis_maxentEvalPlot.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# vis_maxentEvalPlot.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# vis_maxentEvalPlot_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/vis_responsePlot.R b/inst/shiny/modules/vis_responsePlot.R index d829793ed..328594486 100644 --- a/inst/shiny/modules/vis_responsePlot.R +++ b/inst/shiny/modules/vis_responsePlot.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# vis_responsePlot.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# vis_responsePlot_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/xfer_area.R b/inst/shiny/modules/xfer_area.R index 358acf413..3660bc5ee 100644 --- a/inst/shiny/modules/xfer_area.R +++ b/inst/shiny/modules/xfer_area.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_area.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# xfer_area_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/xfer_mess.R b/inst/shiny/modules/xfer_mess.R index 02e7e992d..079e738cd 100644 --- a/inst/shiny/modules/xfer_mess.R +++ b/inst/shiny/modules/xfer_mess.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_mess.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# xfer_mess_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/xfer_time.R b/inst/shiny/modules/xfer_time.R index 47b4e8190..7aa9fe836 100644 --- a/inst/shiny/modules/xfer_time.R +++ b/inst/shiny/modules/xfer_time.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_time.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# xfer_time_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/modules/xfer_user.R b/inst/shiny/modules/xfer_user.R index d79fd77e9..5aca141c8 100644 --- a/inst/shiny/modules/xfer_user.R +++ b/inst/shiny/modules/xfer_user.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# xfer_user.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# xfer_user_module_ui <- function(id) { ns <- shiny::NS(id) tagList( diff --git a/inst/shiny/server.R b/inst/shiny/server.R index 81b6be861..d41bfbe5a 100644 --- a/inst/shiny/server.R +++ b/inst/shiny/server.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# server.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# function(input, output, session) { ########################## # # REACTIVE VALUES LISTS #### diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index e61021172..5fb4301ec 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -1,3 +1,26 @@ +# Wallace EcoMod: a flexible platform for reproducible modeling of +# species niches and distributions. +# +# ui.R +# File author: Wallace EcoMod Dev Team. 2023. +# -------------------------------------------------------------------------- +# This file is part of the Wallace EcoMod application +# (hereafter “Wallace”). +# +# Wallace is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, +# or (at your option) any later version. +# +# Wallace is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Wallace. If not, see . +# -------------------------------------------------------------------------- +# resourcePath <- system.file("shiny", "www", package = "wallace") shiny::addResourcePath("wallaceres", resourcePath) From af43dc54e2ef6bdd0f06faf2bb88f95af0ca9adf Mon Sep 17 00:00:00 2001 From: Daniel Lopez Date: Thu, 7 Dec 2023 10:11:20 -0500 Subject: [PATCH 31/39] Update ecospat version in description file and delete unused file --- DESCRIPTION | 2 +- wallace | 0 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 wallace diff --git a/DESCRIPTION b/DESCRIPTION index 71785f98b..6b0162555 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -37,7 +37,7 @@ Depends: Imports: dplyr (>= 1.0.2), DT (>= 0.5), - ecospat, + ecospat (>= 4.0.0), ENMeval (>= 2.0.3), knitcitations, leafem, diff --git a/wallace b/wallace deleted file mode 100644 index e69de29bb..000000000 From 2bf3421cb89160f80a21fa21fd55e7aac17f2388 Mon Sep 17 00:00:00 2001 From: Daniel Lopez Date: Thu, 7 Dec 2023 10:38:47 -0500 Subject: [PATCH 32/39] Fix license text --- R/custom_modules.R | 2 +- R/envs_ecoClimate.R | 2 +- R/envs_userEnvs.R | 2 +- R/envs_worldclim.R | 2 +- R/espace_nicheOv.R | 2 +- R/espace_occDens.R | 2 +- R/espace_pca.R | 2 +- R/helper_functions.R | 2 +- R/model_bioclim.R | 2 +- R/model_maxent.R | 2 +- R/occs_paleoDb.R | 2 +- R/occs_queryDb.R | 2 +- R/occs_userOccs.R | 2 +- R/part_partitionOccs.R | 2 +- R/penvs_bgExtent.R | 2 +- R/penvs_bgMask.R | 2 +- R/penvs_bgSample.R | 2 +- R/penvs_drawBgExtent.R | 2 +- R/penvs_userBgExtent.R | 2 +- R/poccs_removeByID.R | 2 +- R/poccs_selectOccs.R | 2 +- R/poccs_thinOccs.R | 2 +- R/run_wallace.R | 2 +- R/vis_bioclimPlot.R | 2 +- R/wallace-package.R | 2 +- R/xfer_area.R | 2 +- R/xfer_draw.R | 2 +- R/xfer_mess.R | 2 +- R/xfer_time.R | 2 +- R/xfer_userEnvs.R | 2 +- R/xfer_userExtent.R | 2 +- inst/shiny/global.R | 2 +- inst/shiny/helpers.R | 2 +- inst/shiny/modules/envs_ecoclimate.R | 2 +- inst/shiny/modules/envs_userEnvs.R | 2 +- inst/shiny/modules/envs_worldclim.R | 2 +- inst/shiny/modules/espace_nicheOv.R | 2 +- inst/shiny/modules/espace_occDens.R | 2 +- inst/shiny/modules/espace_pca.R | 2 +- inst/shiny/modules/model_bioclim.R | 2 +- inst/shiny/modules/model_maxent.R | 2 +- inst/shiny/modules/occs_paleoDb.R | 2 +- inst/shiny/modules/occs_queryDb.R | 2 +- inst/shiny/modules/occs_userOccs.R | 2 +- inst/shiny/modules/part_nonSpat.R | 2 +- inst/shiny/modules/part_spat.R | 2 +- inst/shiny/modules/penvs_bgExtent.R | 2 +- inst/shiny/modules/penvs_drawBgExtent.R | 2 +- inst/shiny/modules/penvs_userBgExtent.R | 2 +- inst/shiny/modules/poccs_removeByID.R | 2 +- inst/shiny/modules/poccs_selectOccs.R | 2 +- inst/shiny/modules/poccs_thinOccs.R | 2 +- inst/shiny/modules/rep_markdown.R | 2 +- inst/shiny/modules/rep_refPackages.R | 2 +- inst/shiny/modules/rep_rmms.R | 2 +- inst/shiny/modules/vis_bioclimPlot.R | 2 +- inst/shiny/modules/vis_mapPreds.R | 2 +- inst/shiny/modules/vis_maxentEvalPlot.R | 2 +- inst/shiny/modules/vis_responsePlot.R | 2 +- inst/shiny/modules/xfer_area.R | 2 +- inst/shiny/modules/xfer_mess.R | 2 +- inst/shiny/modules/xfer_time.R | 2 +- inst/shiny/modules/xfer_user.R | 2 +- inst/shiny/server.R | 2 +- inst/shiny/ui.R | 2 +- 65 files changed, 65 insertions(+), 65 deletions(-) diff --git a/R/custom_modules.R b/R/custom_modules.R index efb6c4a2b..0268ddf6e 100644 --- a/R/custom_modules.R +++ b/R/custom_modules.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/envs_ecoClimate.R b/R/envs_ecoClimate.R index 298c91c99..4e7172a04 100644 --- a/R/envs_ecoClimate.R +++ b/R/envs_ecoClimate.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/envs_userEnvs.R b/R/envs_userEnvs.R index b2c52ea29..18a153199 100644 --- a/R/envs_userEnvs.R +++ b/R/envs_userEnvs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/envs_worldclim.R b/R/envs_worldclim.R index 8d5f7c267..98ed0c045 100644 --- a/R/envs_worldclim.R +++ b/R/envs_worldclim.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/espace_nicheOv.R b/R/espace_nicheOv.R index 8d03a448b..b30f67736 100644 --- a/R/espace_nicheOv.R +++ b/R/espace_nicheOv.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/espace_occDens.R b/R/espace_occDens.R index ae7845b53..a83546fa5 100644 --- a/R/espace_occDens.R +++ b/R/espace_occDens.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/espace_pca.R b/R/espace_pca.R index 662206cec..2911a2df9 100644 --- a/R/espace_pca.R +++ b/R/espace_pca.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/helper_functions.R b/R/helper_functions.R index f40f706e7..9d5546a24 100644 --- a/R/helper_functions.R +++ b/R/helper_functions.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/model_bioclim.R b/R/model_bioclim.R index 7aa91812d..699afcd62 100644 --- a/R/model_bioclim.R +++ b/R/model_bioclim.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/model_maxent.R b/R/model_maxent.R index 82c00e28c..6e2db6824 100644 --- a/R/model_maxent.R +++ b/R/model_maxent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/occs_paleoDb.R b/R/occs_paleoDb.R index e340122e6..2eb27f60b 100644 --- a/R/occs_paleoDb.R +++ b/R/occs_paleoDb.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/occs_queryDb.R b/R/occs_queryDb.R index 7f873e961..0e5cea1fc 100644 --- a/R/occs_queryDb.R +++ b/R/occs_queryDb.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/occs_userOccs.R b/R/occs_userOccs.R index 0032b0997..cb423a21c 100644 --- a/R/occs_userOccs.R +++ b/R/occs_userOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/part_partitionOccs.R b/R/part_partitionOccs.R index 287f809cf..4fe048bd3 100644 --- a/R/part_partitionOccs.R +++ b/R/part_partitionOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/penvs_bgExtent.R b/R/penvs_bgExtent.R index 4349cbb9c..182ce02f5 100644 --- a/R/penvs_bgExtent.R +++ b/R/penvs_bgExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/penvs_bgMask.R b/R/penvs_bgMask.R index 5e491719e..7aca1b865 100644 --- a/R/penvs_bgMask.R +++ b/R/penvs_bgMask.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/penvs_bgSample.R b/R/penvs_bgSample.R index 514537a39..e23a426bb 100644 --- a/R/penvs_bgSample.R +++ b/R/penvs_bgSample.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/penvs_drawBgExtent.R b/R/penvs_drawBgExtent.R index 9475d3995..769b05ae6 100644 --- a/R/penvs_drawBgExtent.R +++ b/R/penvs_drawBgExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/penvs_userBgExtent.R b/R/penvs_userBgExtent.R index ed5b37a2a..384e7e813 100644 --- a/R/penvs_userBgExtent.R +++ b/R/penvs_userBgExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/poccs_removeByID.R b/R/poccs_removeByID.R index d650188ae..c29af4ddf 100644 --- a/R/poccs_removeByID.R +++ b/R/poccs_removeByID.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/poccs_selectOccs.R b/R/poccs_selectOccs.R index e7b85513e..1d15ea255 100644 --- a/R/poccs_selectOccs.R +++ b/R/poccs_selectOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/poccs_thinOccs.R b/R/poccs_thinOccs.R index 96312fb6e..dfebbf9f4 100644 --- a/R/poccs_thinOccs.R +++ b/R/poccs_thinOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/run_wallace.R b/R/run_wallace.R index f8818109e..d86cd7bfd 100644 --- a/R/run_wallace.R +++ b/R/run_wallace.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/vis_bioclimPlot.R b/R/vis_bioclimPlot.R index 019a19920..2b3c4b383 100644 --- a/R/vis_bioclimPlot.R +++ b/R/vis_bioclimPlot.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/wallace-package.R b/R/wallace-package.R index 674cf5349..234b483b1 100644 --- a/R/wallace-package.R +++ b/R/wallace-package.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/xfer_area.R b/R/xfer_area.R index 6e09f81cc..f89aedde8 100644 --- a/R/xfer_area.R +++ b/R/xfer_area.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/xfer_draw.R b/R/xfer_draw.R index bb3e3d4a0..4eac042c5 100644 --- a/R/xfer_draw.R +++ b/R/xfer_draw.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/xfer_mess.R b/R/xfer_mess.R index 95b098411..ed61838ec 100644 --- a/R/xfer_mess.R +++ b/R/xfer_mess.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/xfer_time.R b/R/xfer_time.R index 25b09951f..4e28f11d3 100644 --- a/R/xfer_time.R +++ b/R/xfer_time.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/xfer_userEnvs.R b/R/xfer_userEnvs.R index 4d32dcb8c..6a2c0fce8 100644 --- a/R/xfer_userEnvs.R +++ b/R/xfer_userEnvs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/R/xfer_userExtent.R b/R/xfer_userExtent.R index 45c207453..237e4cceb 100644 --- a/R/xfer_userExtent.R +++ b/R/xfer_userExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/global.R b/inst/shiny/global.R index e5561253e..bbbdc688b 100644 --- a/inst/shiny/global.R +++ b/inst/shiny/global.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/helpers.R b/inst/shiny/helpers.R index e67ec76df..37b542a62 100644 --- a/inst/shiny/helpers.R +++ b/inst/shiny/helpers.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/envs_ecoclimate.R b/inst/shiny/modules/envs_ecoclimate.R index e03f1b7e0..8bb8dd31b 100644 --- a/inst/shiny/modules/envs_ecoclimate.R +++ b/inst/shiny/modules/envs_ecoclimate.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/envs_userEnvs.R b/inst/shiny/modules/envs_userEnvs.R index c8e6a18f3..3e0ec60ce 100644 --- a/inst/shiny/modules/envs_userEnvs.R +++ b/inst/shiny/modules/envs_userEnvs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/envs_worldclim.R b/inst/shiny/modules/envs_worldclim.R index 7e6159627..cf92e0c01 100644 --- a/inst/shiny/modules/envs_worldclim.R +++ b/inst/shiny/modules/envs_worldclim.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/espace_nicheOv.R b/inst/shiny/modules/espace_nicheOv.R index 93beaf24e..bcf266399 100644 --- a/inst/shiny/modules/espace_nicheOv.R +++ b/inst/shiny/modules/espace_nicheOv.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/espace_occDens.R b/inst/shiny/modules/espace_occDens.R index 2fe2e72ba..8c774ba1d 100644 --- a/inst/shiny/modules/espace_occDens.R +++ b/inst/shiny/modules/espace_occDens.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/espace_pca.R b/inst/shiny/modules/espace_pca.R index e9429688c..8feba17d8 100644 --- a/inst/shiny/modules/espace_pca.R +++ b/inst/shiny/modules/espace_pca.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/model_bioclim.R b/inst/shiny/modules/model_bioclim.R index c401a62d2..b6cddfc3c 100644 --- a/inst/shiny/modules/model_bioclim.R +++ b/inst/shiny/modules/model_bioclim.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/model_maxent.R b/inst/shiny/modules/model_maxent.R index 023112a3e..059e8db4f 100644 --- a/inst/shiny/modules/model_maxent.R +++ b/inst/shiny/modules/model_maxent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/occs_paleoDb.R b/inst/shiny/modules/occs_paleoDb.R index 1016ee063..8e09835a7 100644 --- a/inst/shiny/modules/occs_paleoDb.R +++ b/inst/shiny/modules/occs_paleoDb.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/occs_queryDb.R b/inst/shiny/modules/occs_queryDb.R index c9ab86a81..2df21ccd6 100644 --- a/inst/shiny/modules/occs_queryDb.R +++ b/inst/shiny/modules/occs_queryDb.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/occs_userOccs.R b/inst/shiny/modules/occs_userOccs.R index 4ed478f79..bf8bd82e0 100644 --- a/inst/shiny/modules/occs_userOccs.R +++ b/inst/shiny/modules/occs_userOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/part_nonSpat.R b/inst/shiny/modules/part_nonSpat.R index 5b6ac090f..945a60076 100644 --- a/inst/shiny/modules/part_nonSpat.R +++ b/inst/shiny/modules/part_nonSpat.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/part_spat.R b/inst/shiny/modules/part_spat.R index ff4ab7adb..b7bd57047 100644 --- a/inst/shiny/modules/part_spat.R +++ b/inst/shiny/modules/part_spat.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/penvs_bgExtent.R b/inst/shiny/modules/penvs_bgExtent.R index b3f755ca4..e27d01395 100644 --- a/inst/shiny/modules/penvs_bgExtent.R +++ b/inst/shiny/modules/penvs_bgExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/penvs_drawBgExtent.R b/inst/shiny/modules/penvs_drawBgExtent.R index 7c3d7145e..364bffe87 100644 --- a/inst/shiny/modules/penvs_drawBgExtent.R +++ b/inst/shiny/modules/penvs_drawBgExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/penvs_userBgExtent.R b/inst/shiny/modules/penvs_userBgExtent.R index dfd066dc4..bb9e4f8af 100644 --- a/inst/shiny/modules/penvs_userBgExtent.R +++ b/inst/shiny/modules/penvs_userBgExtent.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/poccs_removeByID.R b/inst/shiny/modules/poccs_removeByID.R index e6158cfaa..1fbf814d7 100644 --- a/inst/shiny/modules/poccs_removeByID.R +++ b/inst/shiny/modules/poccs_removeByID.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/poccs_selectOccs.R b/inst/shiny/modules/poccs_selectOccs.R index 87838f3c5..21655cd4b 100644 --- a/inst/shiny/modules/poccs_selectOccs.R +++ b/inst/shiny/modules/poccs_selectOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/poccs_thinOccs.R b/inst/shiny/modules/poccs_thinOccs.R index c0540c3ad..118c5d13e 100644 --- a/inst/shiny/modules/poccs_thinOccs.R +++ b/inst/shiny/modules/poccs_thinOccs.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/rep_markdown.R b/inst/shiny/modules/rep_markdown.R index 186d8757c..f19c72f14 100644 --- a/inst/shiny/modules/rep_markdown.R +++ b/inst/shiny/modules/rep_markdown.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/rep_refPackages.R b/inst/shiny/modules/rep_refPackages.R index e1ce1c451..fff9c4c55 100644 --- a/inst/shiny/modules/rep_refPackages.R +++ b/inst/shiny/modules/rep_refPackages.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/rep_rmms.R b/inst/shiny/modules/rep_rmms.R index 8ddfd9fcc..4f4c354b3 100644 --- a/inst/shiny/modules/rep_rmms.R +++ b/inst/shiny/modules/rep_rmms.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/vis_bioclimPlot.R b/inst/shiny/modules/vis_bioclimPlot.R index d72fefbe7..8bf68cf79 100644 --- a/inst/shiny/modules/vis_bioclimPlot.R +++ b/inst/shiny/modules/vis_bioclimPlot.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/vis_mapPreds.R b/inst/shiny/modules/vis_mapPreds.R index be8a1f4fa..9b73cb69d 100644 --- a/inst/shiny/modules/vis_mapPreds.R +++ b/inst/shiny/modules/vis_mapPreds.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/vis_maxentEvalPlot.R b/inst/shiny/modules/vis_maxentEvalPlot.R index 49c113d04..4be1dcc73 100644 --- a/inst/shiny/modules/vis_maxentEvalPlot.R +++ b/inst/shiny/modules/vis_maxentEvalPlot.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/vis_responsePlot.R b/inst/shiny/modules/vis_responsePlot.R index 328594486..02a4c0b6f 100644 --- a/inst/shiny/modules/vis_responsePlot.R +++ b/inst/shiny/modules/vis_responsePlot.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/xfer_area.R b/inst/shiny/modules/xfer_area.R index 3660bc5ee..0c71ae8de 100644 --- a/inst/shiny/modules/xfer_area.R +++ b/inst/shiny/modules/xfer_area.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/xfer_mess.R b/inst/shiny/modules/xfer_mess.R index 079e738cd..4119c0572 100644 --- a/inst/shiny/modules/xfer_mess.R +++ b/inst/shiny/modules/xfer_mess.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/xfer_time.R b/inst/shiny/modules/xfer_time.R index 7aa9fe836..b14bd9665 100644 --- a/inst/shiny/modules/xfer_time.R +++ b/inst/shiny/modules/xfer_time.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/modules/xfer_user.R b/inst/shiny/modules/xfer_user.R index 5aca141c8..321643ea6 100644 --- a/inst/shiny/modules/xfer_user.R +++ b/inst/shiny/modules/xfer_user.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/server.R b/inst/shiny/server.R index d41bfbe5a..c70d10965 100644 --- a/inst/shiny/server.R +++ b/inst/shiny/server.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, diff --git a/inst/shiny/ui.R b/inst/shiny/ui.R index 5fb4301ec..bbffa924f 100644 --- a/inst/shiny/ui.R +++ b/inst/shiny/ui.R @@ -9,7 +9,7 @@ # # Wallace is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, +# the Free Software Foundation, either version 3 of the License, # or (at your option) any later version. # # Wallace is distributed in the hope that it will be useful, From 0565929ed0600a9081208843775126ad69f08a15 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 16 Feb 2024 13:16:35 -0500 Subject: [PATCH 33/39] `rgdal::readOGR()` and `rgdal::writeOGR()` removed --- DESCRIPTION | 2 +- R/mask_spatialPoly.R | 3 ++- inst/shiny/custom_modules/rep_biomodelos.R | 8 +++---- inst/shiny/server.R | 26 +++++++++++----------- tests/testthat/test_envs_userEnvs.R | 1 + 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 98413999d..430e4256b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -75,8 +75,8 @@ Suggests: rangeModelMetadata, raster, rgbif (>= 3.3.0), - rgdal, rgeos, + sf, sp, stars, testthat, diff --git a/R/mask_spatialPoly.R b/R/mask_spatialPoly.R index a3b9d6abb..406c3fe72 100644 --- a/R/mask_spatialPoly.R +++ b/R/mask_spatialPoly.R @@ -40,7 +40,8 @@ mask_spatialPoly <- function(bgShp_path, bgShp_name, sdm, file.rename(bgShp_path, file.path(pathdir, bgShp_name)) } smartProgress(logger, message = "Uploading shapefile ...", { - polyData <- rgdal::readOGR(file.path(pathdir, bgShp_name)[i]) + polyData <- sf::st_read(file.path(pathdir, bgShp_name)[i]) + polyData <- sf::as_Spatial(polyData) }) } else { diff --git a/inst/shiny/custom_modules/rep_biomodelos.R b/inst/shiny/custom_modules/rep_biomodelos.R index 519ef9d27..e12b549c7 100644 --- a/inst/shiny/custom_modules/rep_biomodelos.R +++ b/inst/shiny/custom_modules/rep_biomodelos.R @@ -109,11 +109,11 @@ rep_biomodelos_module_server <- function(input, output, session, common) { c(args = lapply(seq_along(spp[[bioSp()]]$mask$expertPoly), function(i){spp[[bioSp()]]$mask$expertPoly[i][[1]]}), makeUniqueIDs = TRUE)) - rgdal::writeOGR(obj = expertPolys, + sf::st_write(obj = sf::st_as_sf(expertPolys), dsn = tmpdir, layer = paste0(bioSp(), '_expertPolygonsShp'), driver = "ESRI Shapefile", - overwrite_layer = TRUE) + append = FALSE) extsExpPoly <- c('dbf', 'shp', 'shx') fsExpPoly <- file.path(tmpdir, paste0(bioSp(), '_expertPolygonsShp.', extsExpPoly)) zip::zipr(zipfile = tmpExpPoly , files = fsExpPoly) @@ -122,11 +122,11 @@ rep_biomodelos_module_server <- function(input, output, session, common) { # Create extent shapefile # add req ext tmpExt <- file.path(tmpdir, paste0(bioSp(), '_projectionExtentShp.zip')) - rgdal::writeOGR(obj = spp[[bioSp()]]$procEnvs$bgExt, + sf::st_write(obj = sf::st_as_sf(spp[[bioSp()]]$procEnvs$bgExt), dsn = tmpdir, layer = paste0(bioSp(), '_bgShp'), driver = "ESRI Shapefile", - overwrite_layer = TRUE) + append = FALSE) exts <- c('dbf', 'shp', 'shx') fsExt <- file.path(tmpdir, paste0(bioSp(), '_bgShp.', exts)) zip::zipr(zipfile = tmpExt, files = fsExt) diff --git a/inst/shiny/server.R b/inst/shiny/server.R index d122cac78..985f9c1a6 100644 --- a/inst/shiny/server.R +++ b/inst/shiny/server.R @@ -1,6 +1,6 @@ # Wallace EcoMod: a flexible platform for reproducible modeling of # species niches and distributions. -# +# # server.R # File author: Wallace EcoMod Dev Team. 2023. # -------------------------------------------------------------------------- @@ -1196,7 +1196,7 @@ function(input, output, session) { paste0(curSp(), '_mask.', ext) }, content = function(file) { - if (require(rgdal)) { + if (require(sf)) { req(spp[[curSp()]]$mask$prediction) maskRaster <- spp[[curSp()]]$mask$prediction maskValues <- terra::spatSample(x = terra::rast(maskRaster), @@ -1257,7 +1257,7 @@ function(input, output, session) { } } else { logger %>% - writeLog("Please install the rgdal package before downloading rasters.") + writeLog("Please install the sf package before downloading rasters.") } } ) @@ -1274,11 +1274,11 @@ function(input, output, session) { c(args = lapply(seq_along(spp[[curSp()]]$mask$expertPoly), function(i){spp[[curSp()]]$mask$expertPoly[i][[1]]}), makeUniqueIDs = TRUE)) - rgdal::writeOGR(obj = expertPolys, + sf::st_write(obj = sf::st_as_sf(expertPolys), dsn = tmpdir, layer = paste0(n, '_maskExpShp'), driver = "ESRI Shapefile", - overwrite_layer = TRUE) + append = FALSE) exts <- c('dbf', 'shp', 'shx') fs <- paste0(n, '_maskExpShp.', exts) zip::zipr(zipfile = file, files = fs) @@ -1328,7 +1328,7 @@ function(input, output, session) { paste0(curSp(), "_AOO", '.', ext) }, content = function(file) { - if(require(rgdal)) { + if(require(sf)) { if (input$AOOFileType == 'png') { if (!webshot::is_phantomjs_installed()) { logger %>% @@ -1381,7 +1381,7 @@ function(input, output, session) { file.rename(r@file@name, file) } } else { - logger %>% writeLog("Please install the rgdal package before downloading rasters.") + logger %>% writeLog("Please install the sf package before downloading rasters.") } } ) @@ -1393,7 +1393,7 @@ function(input, output, session) { paste0(curSp(), "_overlap", '.', ext) }, content = function(file) { - if(require(rgdal)) { + if(require(sf)) { if (input$OverlapFileType == 'png') { if (!webshot::is_phantomjs_installed()) { logger %>% @@ -1427,7 +1427,7 @@ function(input, output, session) { if (file.exists(paste0(file, ".zip"))) {file.rename(paste0(file, ".zip"), file)} } } else { - logger %>% writeLog("Please install the rgdal package before downloading rasters.") + logger %>% writeLog("Please install the sf package before downloading rasters.") } } ) @@ -1486,7 +1486,7 @@ function(input, output, session) { paste0("richness", '.', ext) }, content = function(file) { - if(require(rgdal)) { + if(require(sf)) { if (input$richFileType == 'png') { if (!webshot::is_phantomjs_installed()) { logger %>% @@ -1529,7 +1529,7 @@ function(input, output, session) { file.rename(r@file@name, file) } } else { - logger %>% writeLog("Please install the rgdal package before downloading rasters.") + logger %>% writeLog("Please install the sf package before downloading rasters.") } } ) @@ -1544,7 +1544,7 @@ function(input, output, session) { }, content = function(file) { - if(require(rgdal)) { + if(require(sf)) { if (input$endFileType == 'png') { if (!webshot::is_phantomjs_installed()) { logger %>% @@ -1590,7 +1590,7 @@ function(input, output, session) { file.rename(r@file@name, file) } } else { - logger %>% writeLog("Please install the rgdal package before downloading rasters.") + logger %>% writeLog("Please install the sf package before downloading rasters.") } } ) diff --git a/tests/testthat/test_envs_userEnvs.R b/tests/testthat/test_envs_userEnvs.R index 11a40c301..f1c1efb7d 100755 --- a/tests/testthat/test_envs_userEnvs.R +++ b/tests/testthat/test_envs_userEnvs.R @@ -38,6 +38,7 @@ userEnvs_stack <- envs_userEnvs(rasPath = Path, rasName = Name, # 'guidance text in this module for more details.'), # fixed = TRUE) # }) +# BAJ (2024-02-14) rgdal has been retired and removed. this test may be added back? ### test output features test_that("output type checks", { From 9fb83e2f2435d5b7782adeba2f3f1d681a6e6cd1 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 16 Feb 2024 17:03:45 -0500 Subject: [PATCH 34/39] removed `rgeos::gBuffer()` --- R/mask_spatialPoly.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/mask_spatialPoly.R b/R/mask_spatialPoly.R index 406c3fe72..77e1f6cda 100644 --- a/R/mask_spatialPoly.R +++ b/R/mask_spatialPoly.R @@ -5,7 +5,7 @@ #' x #' #' @param bgShp_path Path to the user provided shapefile -#' @param bgShp_name Name of the user porvided shapefile +#' @param bgShp_name Name of the user provided shapefile #' @param sdm x #' @param logger stores all notification messages to be displayed in the Log Window of Wallace GUI. insert the logger reactive list here for running in shiny, #' otherwise leave the default NULL @@ -74,8 +74,9 @@ mask_spatialPoly <- function(bgShp_path, bgShp_name, sdm, polR <- sf::st_as_sf(terra::as.polygons(sdm, trunc = TRUE, dissolve = TRUE, values = TRUE), as_points = FALSE, merge = TRUE) - polyData <- rgeos::gBuffer(polyData, byid = TRUE, width = 0) + # polyData <- rgeos::gBuffer(polyData, byid = TRUE, width = 0) polyData <- sf::st_as_sf(polyData) + polyData <- sf::st_buffer(polyData, dist = 0) # BAJ not sure why buffer of 0 is needed? polyData <- replace(polyData, is.na(polyData), values = "NA") # Check for NAs v <- terra::extract(sdm, polyData) From 1a1c0e2b6271bbd8d6ca9a897e9635516ab5e032 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Thu, 22 Feb 2024 16:50:45 -0500 Subject: [PATCH 35/39] removed rgeos::gIntersects() --- R/mask_spatialPoly.R | 9 ++++++--- inst/shiny/modules/mask_expPoly.R | 14 ++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/R/mask_spatialPoly.R b/R/mask_spatialPoly.R index 77e1f6cda..d52b89e18 100644 --- a/R/mask_spatialPoly.R +++ b/R/mask_spatialPoly.R @@ -58,11 +58,14 @@ mask_spatialPoly <- function(bgShp_path, bgShp_name, sdm, "is WGS84 (**)" ) } - if (!rgeos::gIntersects(methods::as(raster::extent(sdm), 'SpatialPolygons'), - polyData)) { + + sdm_ext <- methods::as(raster::extent(sdm), 'SpatialPolygons') + sdm_sfc <- sf::st_as_sfc(sdm_ext) #sdm extent to sfc + polyData_sfc <- sf::st_as_sfc(polyData) #convert polyData to sfc + if (!sf::st_intersects(sdm_sfc, polyData_sfc, sparse = FALSE)[1,1]) { logger %>% writeLog( type = 'error', hlSpp(spN), - "Shapefile does not match with sdm extent. Please specify a new polygon. (**)" + "Shapefile does not match with SDM extent. Please specify a new polygon. " ) return() } diff --git a/inst/shiny/modules/mask_expPoly.R b/inst/shiny/modules/mask_expPoly.R index e2c5e848c..8e6b2144e 100644 --- a/inst/shiny/modules/mask_expPoly.R +++ b/inst/shiny/modules/mask_expPoly.R @@ -143,10 +143,13 @@ mask_expPoly_module_server <- function(input, output, session, common) { polyX <- printVecAsis(round(spp[[curSp()]]$polyMaskXY[, 1], digits = 4)) polyY <- printVecAsis(round(spp[[curSp()]]$polyMaskXY[, 2], digits = 4)) - if (!rgeos::gIntersects(polyExt, polyMask)) { + polyExt_sf<- sf::st_as_sfc(polyExt) #convert poly to sf + polyMask_sf<- sf::st_as_sfc(polyMask) #convert polyMask to sf + # set crs? + if (!sf::st_intersects(polyExt_sf, polyMask_sf, sparse = FALSE)[1,1]) { logger %>% writeLog( type = 'error', hlSpp(curSp()), - "The polygon is outside the background extent. Please specify a new polygon. (**)" + "The polygon falls outside the background extent. Please specify a new polygon. " ) return() } @@ -199,10 +202,13 @@ mask_expPoly_module_server <- function(input, output, session, common) { list(dsn = input$polyExpShp$datapath[i], layer = shpName) } - if (!rgeos::gIntersects(polyExt, polyMask)) { + polyExt_sf<- sf::st_as_sfc(polyExt) #convert poly to sf + polyMask_sf<- sf::st_as_sfc(polyMask) #convert polyMask to sf + # set crs? + if (!sf::st_intersects(polyExt_sf, polyMask_sf, sparse = FALSE)[1,1]) { logger %>% writeLog( type = 'error', hlSpp(curSp()), - "The polygon is outside the background extent. Please specify a new polygon. (**)" + "The polygon falls outside the background extent. Please specify a new polygon. " ) return() } From 43760739412384aa82a0da9f1e74e8a64663b133 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 23 Feb 2024 15:52:20 -0500 Subject: [PATCH 36/39] removed `rgeos::gUnaryUnion()` --- inst/shiny/modules/mask_spatial.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/inst/shiny/modules/mask_spatial.R b/inst/shiny/modules/mask_spatial.R index 1d7c42f95..f1cc14db4 100644 --- a/inst/shiny/modules/mask_spatial.R +++ b/inst/shiny/modules/mask_spatial.R @@ -163,7 +163,9 @@ mask_spatial_module_server <- function(input, output, session, common) { # FUNCTION CALL #### selectedPoly <- subset(spatialMask, spatialMask[[maskFields()]] %in% maskAttribute()) - dissPoly <- rgeos::gUnaryUnion(selectedPoly) + selectedPoly_sf <- sf::st_as_sf(selectedPoly) + dissPoly <- sf::st_union(selectedPoly_sf) + dissPoly <- sf::as_Spatial(dissPoly) if (is.null(spp[[curSp()]]$mask$prediction)) { maskPred <- spp[[curSp()]]$mask$origPred From df646d65a948e37da6df85b4d166c585d59cb932 Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Fri, 23 Feb 2024 16:00:18 -0500 Subject: [PATCH 37/39] v2024.02.23 Removed expired pkgs (maptools, rgdal, rgeos) --- DESCRIPTION | 5 ++--- README.md | 4 ++-- inst/shiny/Rmd/text_about.Rmd | 2 +- inst/shiny/Rmd/text_intro_tab.Rmd | 2 +- inst/shiny/Rmd/userReport_intro.Rmd | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 430e4256b..befadf205 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: wallace -Version: 2023.12.14 -Date: 2023-12-14 +Version: 2024.02.23 +Date: 2024-02-23 Title: A Modular Platform for Reproducible Modeling of Species Niches and Distributions Description: The 'shiny' application Wallace is a modular platform for @@ -75,7 +75,6 @@ Suggests: rangeModelMetadata, raster, rgbif (>= 3.3.0), - rgeos, sf, sp, stars, diff --git a/README.md b/README.md index abf5f8ff9..41a7d230a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![R-CMD-check](https://github.com/wallaceEcoMod/wallace/workflows/R-CMD-check/badge.svg)](https://github.com/wallaceEcoMod/wallace/actions) [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![CRAN version](http://www.r-pkg.org/badges/version/wallace)](https://CRAN.R-project.org/package=wallace) [![downloads](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange)](https://cranlogs.r-pkg.org:443/badges/grand-total/wallace?color=orange) -# Wallace (v2023.12.14) +# Wallace (v2024.02.23) *Wallace* is a modular platform for reproducible modeling of species niches and distributions, written in R. The application guides users through a complete analysis, from the acquisition of data to visualizing model predictions on an interactive map, thus bundling complex workflows into a single, streamlined interface. Install *Wallace* via CRAN and run the application with the following R code. @@ -26,7 +26,7 @@ run_wallace() Please make sure you have installed the latest versions of both R (Mac OS, Windows) and RStudio (Mac OS / Windows: choose the free version). #### How to run Maxent with maxent.jar -*Wallace* v.2023.12.14 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. +*Wallace* v.2024.02.23 includes two options to run Maxent models: maxnet and maxent.jar. The former, which is an R implementation and fits the model with the package `glmnet`, is now the default and does not require the package `rJava` (see Phillips et al. 2017). The latter, which is the Java implementation, runs the `maxent()` function in the package `dismo`. This function requires the user to place the `maxent.jar` file in the `/java` directory of the `dismo` package root folder. You can download Maxent here, and locate `maxent.jar`, which is the Maxent program itself, in the downloaded folder. You can find the directory path to `dismo/java` by running `system.file('java', package="dismo")` at the R console. Simply copy `maxent.jar` and paste it into this folder. If you try to run Maxent in *Wallace* without the file in place, you will get a warning message in the log window and Maxent will not run. ### Potential Issues diff --git a/inst/shiny/Rmd/text_about.Rmd b/inst/shiny/Rmd/text_about.Rmd index 1776b5a79..686618f05 100644 --- a/inst/shiny/Rmd/text_about.Rmd +++ b/inst/shiny/Rmd/text_about.Rmd @@ -6,7 +6,7 @@ output: html_document ### **What is *Wallace*?** logo -Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2023.12.14) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. +Welcome to *Wallace*, a flexible application for reproducible ecological modeling, built for community expansion. The current version of *Wallace* (v2024.02.23) steps the user through a full niche/distribution modeling analysis, from data acquisition to visualizing results. The application is written in `R` with the web app development package `shiny`. Please find the stable version of *Wallace* on CRAN, and the development version on Github. We also maintain a *Wallace* website that has some basic info, links, and will be updated with tutorial materials in the near future. diff --git a/inst/shiny/Rmd/text_intro_tab.Rmd b/inst/shiny/Rmd/text_intro_tab.Rmd index 3d863f378..3e89dc2eb 100644 --- a/inst/shiny/Rmd/text_intro_tab.Rmd +++ b/inst/shiny/Rmd/text_intro_tab.Rmd @@ -5,7 +5,7 @@ output: html_document #### WORKFLOW -*Wallace* (v2023.12.14) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. +*Wallace* (v2024.02.23) currently includes ten components, or steps of a possible workflow. Each component includes two or more modules, which are possible analyses for that step. **Components:** diff --git a/inst/shiny/Rmd/userReport_intro.Rmd b/inst/shiny/Rmd/userReport_intro.Rmd index 69f94cf5a..fb476f2a2 100644 --- a/inst/shiny/Rmd/userReport_intro.Rmd +++ b/inst/shiny/Rmd/userReport_intro.Rmd @@ -10,7 +10,7 @@ knit_engines$set(asis = function(options) { knitr::opts_chunk$set(message = FALSE, warning = FALSE, eval = FALSE) ``` -Please find below the R code history from your *Wallace* v2023.12.14 session. +Please find below the R code history from your *Wallace* v2024.02.23 session. You can reproduce your session results by running this R Markdown file in RStudio. From 1d6ac20172056bfdb43212b610c59f4ac1694d7f Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Mon, 26 Feb 2024 15:42:30 -0500 Subject: [PATCH 38/39] added Beth G. to team --- inst/shiny/Rmd/text_team.Rmd | 5 +++++ inst/shiny/www/img/beth.png | Bin 0 -> 162742 bytes 2 files changed, 5 insertions(+) create mode 100644 inst/shiny/www/img/beth.png diff --git a/inst/shiny/Rmd/text_team.Rmd b/inst/shiny/Rmd/text_team.Rmd index bde42c9a5..dfdd4b16b 100644 --- a/inst/shiny/Rmd/text_team.Rmd +++ b/inst/shiny/Rmd/text_team.Rmd @@ -28,6 +28,11 @@ output: html_document Bethany A. Johnson (developer) received her MS in Biology from the City College of New York and is currently a Visiting Scientist at the Center for Biodiversity & Conservation at the American Museum of Natural History.
+beth + +Beth E. Gerstner (developer, Wallace Fellow) received her PhD from Michigan State University, is a NASA FINESST Award winner, and a Wallace fellow. She currently works for Map of Life at the Center for Biodiversity and Global Change at Yale University. +
+ Daniel López Lozano (developer) is a Biodiversity Informatics Specialist at the American Museum of Natural History's Center for Biodiversity & Conservation.
diff --git a/inst/shiny/www/img/beth.png b/inst/shiny/www/img/beth.png new file mode 100644 index 0000000000000000000000000000000000000000..9232f936b627906c16e113ecb6543a9e26407819 GIT binary patch literal 162742 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 h10Z5~fLBYuM`c%c`7B$Ln|+ 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 literal 0 HcmV?d00001 From 279044667ad933270e5478485ecb6115c268882e Mon Sep 17 00:00:00 2001 From: Bethany Johnson Date: Sat, 2 Mar 2024 12:02:37 -0500 Subject: [PATCH 39/39] add error msg for prediction --- inst/shiny/custom_modules/rep_biomodelos.R | 14 ++++++++++++-- inst/shiny/custom_modules/rep_biomodelos.yml | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/inst/shiny/custom_modules/rep_biomodelos.R b/inst/shiny/custom_modules/rep_biomodelos.R index e12b549c7..85092681f 100644 --- a/inst/shiny/custom_modules/rep_biomodelos.R +++ b/inst/shiny/custom_modules/rep_biomodelos.R @@ -21,6 +21,7 @@ rep_biomodelos_module_server <- function(input, output, session, common) { spp <- common$spp bioSp <- common$bioSp + curSp <- common$curSp output$bioSpUI <- renderUI({ # check that a species is in the list already -- if not, don't proceed @@ -36,15 +37,23 @@ rep_biomodelos_module_server <- function(input, output, session, common) { }) observeEvent(input$pushBiomod, { + if (is.null(spp[[curSp()]]$visualization$mapPred)) { + #add warning + shinyalert::shinyalert( + "You need a map prediction built on Wallace in order to push payload to BioModelos. ", + type = "error") + return() + } else { + if (spp[[bioSp()]]$rmm$data$occurrence$sources != "Biomodelos") { shinyalert::shinyalert( - "You must submit a model built with occurrences from BioModelos (**)", + "You must submit a model built with occurrences from BioModelos. ", type = "error") return() } if (is.null(spp[[bioSp()]]$biomodelos$prediction)) { shinyalert::shinyalert( - "You need a map prediction build on Wallace before pushing to BioModelos (**).", + "You need a map prediction built on Wallace before pushing to BioModelos. ", type = "error") return() } @@ -303,6 +312,7 @@ rep_biomodelos_module_server <- function(input, output, session, common) { type = "error") return() } + } }) } diff --git a/inst/shiny/custom_modules/rep_biomodelos.yml b/inst/shiny/custom_modules/rep_biomodelos.yml index f25949ed5..66c49314f 100644 --- a/inst/shiny/custom_modules/rep_biomodelos.yml +++ b/inst/shiny/custom_modules/rep_biomodelos.yml @@ -1,5 +1,5 @@ component: "rep" short_name: "BioModelos payload" long_name: "BioModelos payload" -authors: "GEPB (**)" +authors: "Gonzalo E. Pinilla-Buitrago, Bethany A. Johnson" package: []