## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
    collapse = TRUE,
    comment = "#>"
)

## ----installation, eval = FALSE-----------------------------------------------
# # Install from GitHub
# # install.packages("devtools")
# # devtools::install_github("gaoyu19920914/betaStability")
# 
# # OR install from BioConductor (in the future when it's available)
# # if (!requireNamespace("BiocManager", quietly = TRUE))
# #     install.packages("BiocManager")
# # BiocManager::install("betaStability")

## ----load-packages------------------------------------------------------------
library(betaStability)
library(vegan)
library(ggplot2)
data("BCI", "BCI.env", "mite", "mite.env", "dune", "dune.env")

## ----dataframe_preparing function---------------------------------------------
df_prepare <- function(df) {
    # Remove columns where all elements are the same
    df <- df[, vapply(df, function(x) length(unique(x)) > 1, logical(1))]

    # Convert columns to integer if they contain different types of strings
    for (col in names(df)) {
        if (is.character(df[[col]]) && length(unique(df[[col]])) > 1) {
            df[[col]] <- as.integer(as.factor(df[[col]]))
        }
    }
    return(df)
}

## ----linear-bci---------------------------------------------------------------
# Calculate stability with linearPred
stability_BCI_linear <- betaStability(
    comtable = BCI,
    envmeta = BCI.env[, c("Precipitation", "Elevation", "EnvHet")],
    method = "linearPred"
)

# Inspect the result
head(stability_BCI_linear)
length(stability_BCI_linear)

## ----linear-dune--------------------------------------------------------------
data(dune)
data(dune.env)

# Inspect the data
head(dune)
head(dune.env)

# Dimensions of the datasets
cat("Dimensions of dune:", dim(dune), "\n")
cat("Dimensions of dune.env:", dim(dune.env), "\n")

# Process environmental data using df_prepare
dune.env_processed <- df_prepare(dune.env)

# Calculate stability with linearPred
stability_dune_linear <- betaStability(
    comtable = dune,
    envmeta = dune.env_processed,
    method = "linearPred"
)

# Inspect the result
head(stability_dune_linear)
length(stability_dune_linear)

## ----linear-mite--------------------------------------------------------------
data(mite)
data(mite.env)

# Inspect the data
head(mite)
head(mite.env)

# Dimensions of the datasets
cat("Dimensions of mite:", dim(mite), "\n")
cat("Dimensions of mite.env:", dim(mite.env), "\n")

# Process environmental data using df_prepare
mite.env_processed <- df_prepare(mite.env)

# Calculate stability with linearPred
stability_mite_linear <- betaStability(
    comtable = mite,
    envmeta = mite.env_processed,
    method = "linearPred"
)

# Inspect the result
head(stability_mite_linear)
length(stability_mite_linear)

## ----plot-all-linear----------------------------------------------------------
p_mite <- plotStability(stability_mite_linear)
p_mite

p_dune <- plotStability(stability_dune_linear)
p_dune

p_BCI <- plotStability(stability_BCI_linear)
p_BCI

## -----------------------------------------------------------------------------
print(sessionInfo())

