The TAD package uses the future
API to enhance reproducibility, and uniformize the way multiprocessing is done across plateforms. The future
package is not mandatory, but it is recommanded (we used the HenrikBengtsson/future@1.33.2
to test this package). You can install it with:
## if you want to install the version 1.33.2
::install_github("HenrikBengtsson/future@1.33.2")
remotes
## if you want to install any version
::install_github("HenrikBengtsson/future")
remotes
## if you want to install the latest version
::install_github("HenrikBengtsson/future@*release") remotes
For small datasets (< 16 variables/columns), we recommand using the future::sequencial
strategy/plan.
Otherwise, you can use the future::multisession
strategy/plan to fasten some of the processing in this package.
Load the future
library and define the future::plan
to future::multisession
.
library(future)
plan(multisession)
data.frame(
weights <-sp1 = c(1, 0),
sp2 = c(2, 8),
sp3 = c(0, 2)
) data.frame(
aggregation_factor <-plots = c("plot1", "plot2")
)
proc.time()[[1]]
time_before <-## This will run in singleprocess mode
str(TAD::generate_random_matrix(
weights = weights,
aggregation_factor = aggregation_factor,
randomization_number = 500
))#> 'data.frame': 1002 obs. of 4 variables:
#> $ number: int 0 0 1 1 2 2 3 3 4 4 ...
#> $ index1: num 1 0 2 0 1 0 1 0 2 0 ...
#> $ index2: num 2 8 1 2 2 8 2 2 1 8 ...
#> $ index3: num 0 2 0 8 0 2 0 8 0 2 ...
Load the future
library and define the future::plan
to future::multisession
.
library(future)
plan(multisession)
data.frame(
weights <-sp1 = c(1, 0),
sp2 = c(2, 8),
sp3 = c(0, 2)
) data.frame(
aggregation_factor <-plots = c("plot1", "plot2")
)
proc.time()[[1]]
time_before <-## This will run in multiprocessing mode
str(TAD::generate_random_matrix(
weights = weights,
aggregation_factor = aggregation_factor,
randomization_number = 500
))#> 'data.frame': 1002 obs. of 4 variables:
#> $ number: int 0 0 1 1 2 2 3 3 4 4 ...
#> $ index1: num 1 0 2 0 1 0 2 0 1 0 ...
#> $ index2: num 2 8 1 8 2 8 1 2 2 8 ...
#> $ index3: num 0 2 0 2 0 2 0 8 0 2 ...
Don’t forget to reset the plan to future::sequencial
when you have finished your processing. It is necesary to cleanup the resources allocated with the underlying calls of the parallel
package.
plan(sequential)
function(x) {
with_parallelism <-::plan(future::multisession)
futureon.exit(future::plan(future::sequential))
force(x)
}
# weights <- TAD::AB[, c(5:102)]
TAD::AB[, c(5:30)]
weights <-with_parallelism(
TAD::launch_analysis_tad(
result <-weights = weights,
weights_factor = TAD::AB[, c("Year", "Plot", "Treatment", "Bloc")],
trait_data = log(TAD::trait[["SLA"]])[seq_len(ncol(weights))],
aggregation_factor_name = c("Year", "Bloc"),
statistics_factor_name = c("Treatment"),
regenerate_abundance_df = TRUE,
regenerate_weighted_moments_df = TRUE,
regenerate_stat_per_obs_df = TRUE,
regenerate_stat_per_rand_df = TRUE,
randomization_number = 100,
seed = 1312,
significativity_threshold = c(0.05, 0.95)
)
)
str(result)
#> List of 9
#> $ raw_abundance_df :'data.frame': 9696 obs. of 27 variables:
#> ..$ number : int [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index1 : num [1:9696] 0 0.84 0 9.15 0 ...
#> ..$ index2 : num [1:9696] 0 0.84 0 0 0 ...
#> ..$ index3 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index4 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index5 : num [1:9696] 1 1.681 21.26 22.876 0.794 ...
#> ..$ index6 : num [1:9696] 1 0 1.575 0 0.794 ...
#> ..$ index7 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index8 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index9 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index10: num [1:9696] 0 0 0 0 0 ...
#> ..$ index11: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index12: num [1:9696] 0 0.84 0 0 0 ...
#> ..$ index13: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index14: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index15: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index16: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index17: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index18: num [1:9696] 0 0 0.787 0.654 0 ...
#> ..$ index19: num [1:9696] 2 0 0 1.31 2.38 ...
#> ..$ index20: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index21: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index22: num [1:9696] 0 0 2.36 0 0 ...
#> ..$ index23: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index24: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index25: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index26: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> $ filtered_weights :'data.frame': 96 obs. of 25 variables:
#> ..$ SP1 : num [1:96] 0 0.84 0 9.15 0 ...
#> ..$ SP3 : num [1:96] 0 0.84 0 0 0 ...
#> ..$ SP4 : int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP5 : num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP6 : num [1:96] 1 1.681 21.26 22.876 0.794 ...
#> ..$ SP7 : num [1:96] 1 0 1.575 0 0.794 ...
#> ..$ SP8 : int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP9 : num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP11: num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP12: num [1:96] 0 0 0 0 0 ...
#> ..$ SP13: num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP14: num [1:96] 0 0.84 0 0 0 ...
#> ..$ SP15: num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP16: num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP18: int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP19: int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP20: num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP21: num [1:96] 0 0 0.787 0.654 0 ...
#> ..$ SP22: num [1:96] 2 0 0 1.31 2.38 ...
#> ..$ SP24: int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP25: num [1:96] 0 0 2.36 0 0 ...
#> ..$ SP26: int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP28: int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP30: int [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ SP31: num [1:96] 0 0 0 0 0 0 0 0 0 0 ...
#> $ filtered_weights_factor :'data.frame': 96 obs. of 4 variables:
#> ..$ Year : Factor w/ 12 levels "2010","2011",..: 1 1 1 1 2 2 2 2 3 3 ...
#> ..$ Plot : Factor w/ 8 levels "4","6","11","13",..: 2 4 6 8 2 4 6 8 2 4 ...
#> ..$ Treatment: Factor w/ 2 levels "Mown_NPK","Mown_Unfertilized": 1 1 1 1 1 1 1 1 1 1 ...
#> ..$ Bloc : Factor w/ 2 levels "1","2": 1 1 2 2 1 1 2 2 1 1 ...
#> $ filtered_trait_data : num [1:25] 2.73 3.47 3.48 3.63 3.2 ...
#> $ abundance_df :'data.frame': 9696 obs. of 26 variables:
#> ..$ number : int [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index1 : num [1:9696] 0 0.84 0 9.15 0 ...
#> ..$ index2 : num [1:9696] 0 0.84 0 0 0 ...
#> ..$ index3 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index4 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index5 : num [1:9696] 1 1.681 21.26 22.876 0.794 ...
#> ..$ index6 : num [1:9696] 1 0 1.575 0 0.794 ...
#> ..$ index7 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index8 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index9 : num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index10: num [1:9696] 0 0 0 0 0 ...
#> ..$ index11: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index12: num [1:9696] 0 0.84 0 0 0 ...
#> ..$ index13: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index14: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index15: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index16: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index17: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index18: num [1:9696] 0 0 0.787 0.654 0 ...
#> ..$ index19: num [1:9696] 2 0 0 1.31 2.38 ...
#> ..$ index21: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index22: num [1:9696] 0 0 2.36 0 0 ...
#> ..$ index23: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index24: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index25: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ index26: num [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> $ weighted_moments :'data.frame': 9696 obs. of 10 variables:
#> ..$ Year : Factor w/ 12 levels "2010","2011",..: 1 1 1 1 2 2 2 2 3 3 ...
#> ..$ Plot : Factor w/ 8 levels "4","6","11","13",..: 2 4 6 8 2 4 6 8 2 4 ...
#> ..$ Treatment : Factor w/ 2 levels "Mown_NPK","Mown_Unfertilized": 1 1 1 1 1 1 1 1 1 1 ...
#> ..$ Bloc : Factor w/ 2 levels "1","2": 1 1 2 2 1 1 2 2 1 1 ...
#> ..$ number : int [1:9696] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ mean : num [1:9696] 3.19 3.18 3.19 3.07 3.17 ...
#> ..$ variance : num [1:9696] 0.0212 0.0607 0.0108 0.0427 0.0193 ...
#> ..$ skewness : num [1:9696] 0.768 -0.891 -0.929 -0.979 1.103 ...
#> ..$ kurtosis : num [1:9696] 1.95 2.62 6.19 2.04 2.58 ...
#> ..$ distance_law: num [1:9696] -0.503 -0.037 3.467 -0.78 -0.497 ...
#> $ statistics_per_observation:'data.frame': 96 obs. of 20 variables:
#> ..$ Year : Factor w/ 12 levels "2010","2011",..: 1 1 1 1 2 2 2 2 3 3 ...
#> ..$ Plot : Factor w/ 8 levels "4","6","11","13",..: 2 4 6 8 2 4 6 8 2 4 ...
#> ..$ Treatment : Factor w/ 2 levels "Mown_NPK","Mown_Unfertilized": 1 1 1 1 1 1 1 1 1 1 ...
#> ..$ Bloc : Factor w/ 2 levels "1","2": 1 1 2 2 1 1 2 2 1 1 ...
#> ..$ standardized_observedmean : num [1:96] -0.296 -0.611 0.201 -0.689 -0.26 ...
#> ..$ standardized_min_quantilemean : num [1:96] -1.75 -1.83 -1.68 -1.78 -1.74 ...
#> ..$ standardized_max_quantilemean : num [1:96] 1.28 1.51 1.37 1.43 1.31 ...
#> ..$ significancemean : logi [1:96] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> ..$ standardized_observedvariance : num [1:96] -0.441 0.536 -0.594 0.532 -0.613 ...
#> ..$ standardized_min_quantilevariance: num [1:96] -1.006 -1.231 -1.03 -0.974 -1.19 ...
#> ..$ standardized_max_quantilevariance: num [1:96] 1.89 1.55 2.23 2.16 1.74 ...
#> ..$ significancevariance : logi [1:96] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> ..$ standardized_observedskewness : num [1:96] 1.647 -0.567 -0.309 -0.247 1.286 ...
#> ..$ standardized_min_quantileskewness: num [1:96] -1.37 -1.42 -1.39 -1.8 -1.29 ...
#> ..$ standardized_max_quantileskewness: num [1:96] 1.52 1.73 1.42 1.56 1.35 ...
#> ..$ significanceskewness : logi [1:96] TRUE FALSE FALSE FALSE FALSE FALSE ...
#> ..$ standardized_observedkurtosis : num [1:96] 0.292 0.755 -0.612 -0.702 0.344 ...
#> ..$ standardized_min_quantilekurtosis: num [1:96] -1.814 -1.724 -0.973 -0.757 -1.619 ...
#> ..$ standardized_max_quantilekurtosis: num [1:96] 1.16 1.54 1.74 1.94 1.24 ...
#> ..$ significancekurtosis : logi [1:96] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ stat_per_rand :'data.frame': 202 obs. of 8 variables:
#> ..$ number : int [1:202] 0 0 1 1 2 2 3 3 4 4 ...
#> ..$ Treatment : Factor w/ 2 levels "Mown_NPK","Mown_Unfertilized": 1 2 1 2 1 2 1 2 1 2 ...
#> ..$ slope : num [1:202] 1.15 1.76 1.04 1.23 1.03 ...
#> ..$ intercept : num [1:202] 2.15 1.23 1.89 1.93 1.54 ...
#> ..$ rsquare : num [1:202] 0.811 0.865 0.94 0.864 0.988 ...
#> ..$ tad_stab : num [1:202] 1.512 0.674 1.149 0.91 0.568 ...
#> ..$ distance_to_family : num [1:202] 1.65 0.994 1.173 1.07 0.628 ...
#> ..$ cv_distance_to_family: num [1:202] 206.5 258.4 198.9 332.9 94.6 ...
#> $ ses_skr :'data.frame': 2 obs. of 13 variables:
#> ..$ slope_ses : num [1:2] -0.18 3.54
#> ..$ slope_signi : logi [1:2] FALSE TRUE
#> ..$ intercept_ses : num [1:2] 1.48 -2.32
#> ..$ intercept_signi : logi [1:2] FALSE TRUE
#> ..$ rsquare_ses : num [1:2] -0.843 -0.147
#> ..$ rsquare_signi : logi [1:2] FALSE FALSE
#> ..$ tad_stab_ses : num [1:2] 0.858 -0.852
#> ..$ tad_stab_signi : logi [1:2] FALSE FALSE
#> ..$ tad_eve_ses : num [1:2] 0.917 -0.475
#> ..$ tad_eve_signi : logi [1:2] FALSE FALSE
#> ..$ cv_tad_eve_ses : num [1:2] -1.05 -0.455
#> ..$ cv_tad_eve_signi: logi [1:2] FALSE FALSE
#> ..$ Treatment : chr [1:2] "Mown_NPK" "Mown_Unfertilized"