R

Description

According to the page of R, R is a free software environment for statistical computing and graphics. It compiles and runs on a wide variety of UNIX, Windows, and MacOS platforms.

Available Versions

  • R/4.0.2 (default)

Loading the Module

# Load R
module load R/4.0.2

# Verify installation
R --version

Serial Job Submission

submit_r_serial.sh
#!/bin/bash
#SBATCH -J r_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G

export INPUT="analysis.R"
export OUTPUT="analysis.out"

module load R/4.0.2

job-nanny Rscript analysis.R > analysis.out

Job Submission with Parallelism

submit_r_parallel.sh
#!/bin/bash
#SBATCH -J r_parallel
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G

export INPUT="parallel_analysis.R"
export OUTPUT="parallel_results/"

module load R/4.0.2

job-nanny Rscript parallel_analysis.R

R Script Example

analysis.R
# Basic statistical analysis
library(ggplot2)

# Load data
data <- read.csv("data.csv")

# Descriptive statistics
summary_stats <- summary(data)
write.csv(as.data.frame(summary_stats), "summary.csv")

# Linear regression
model <- lm(y ~ x, data=data)
summary_model <- summary(model)
capture.output(summary_model, file="regression.txt")

# Plots
p <- ggplot(data, aes(x=x, y=y)) +
     geom_point() +
     geom_smooth(method="lm") +
     theme_minimal() +
     labs(title="Linear Regression", x="X", y="Y")

ggsave("regression_plot.png", p, width=8, height=6)

# Save results
saveRDS(model, "model.rds")

Example with Parallelism

parallel_analysis.R
library(parallel)
library(foreach)
library(doParallel)

# Detect number of cores
ncores <- detectCores()
cat("Number of available cores:", ncores, "\n")

# Register parallel cluster
cl <- makeCluster(ncores)
registerDoParallel(cl)

# Parallel Monte Carlo simulation
nsim <- 10000
results <- foreach(i=1:nsim, .combine=c) %dopar% {
    # Simulation
    x <- rnorm(1000)
    mean(x)
}

# Statistics
cat("Mean of means:", mean(results), "\n")
cat("Standard deviation:", sd(results), "\n")

# Histogram
png("histogram.png")
hist(results, breaks=50, main="Distribution of means",
     xlab="Mean", ylab="Frequency")
dev.off()

# Stop cluster
stopCluster(cl)

Job Array for Multiple Analyses

submit_r_array.sh
#!/bin/bash
#SBATCH -J r_array
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 12:00:00
#SBATCH --mem=8G

FILES=($(ls data_*.csv))
FILE=${FILES[$SLURM_ARRAY_TASK_ID-1]}
OUTPUT_DIR="results_${FILE%.csv}"

export INPUT="$FILE"
export OUTPUT="$OUTPUT_DIR/"

module load R/4.0.2

mkdir -p $OUTPUT_DIR
cd $OUTPUT_DIR

cat > process_${SLURM_ARRAY_TASK_ID}.R << EOF
# Process file $FILE
data <- read.csv("../$FILE")

# Analysis
result <- list(
    file = "$FILE",
    mean = mean(data$value, na.rm=TRUE),
    sd = sd(data$value, na.rm=TRUE),
    median = median(data$value, na.rm=TRUE),
    min = min(data$value, na.rm=TRUE),
    max = max(data$value, na.rm=TRUE),
    n = sum(!is.na(data$value))
)

# Save
saveRDS(result, "results.rds")

# Text report
sink("report.txt")
cat("File:", result$file, "\n")
cat("Mean:", result$mean, "\n")
cat("Standard deviation:", result$sd, "\n")
cat("Median:", result$median, "\n")
cat("Minimum:", result$min, "\n")
cat("Maximum:", result$max, "\n")
cat("N (non-NA):", result$n, "\n")
sink()
EOF

job-nanny Rscript process_${SLURM_ARRAY_TASK_ID}.R

Package Installation

install_r_packages.sh
#!/bin/bash
#SBATCH -J install_r_pkgs
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G

module load R/4.0.2

# Install packages in personal directory
cat > install_packages.R << 'EOF'
# Define installation directory
lib_path <- Sys.getenv("R_LIBS_USER")
if (!dir.exists(lib_path)) dir.create(lib_path, recursive=TRUE)

# Install packages
packages <- c(
    "tidyverse",
    "ggplot2",
    "dplyr",
    "tidyr",
    "data.table",
    "parallel",
    "doParallel",
    "foreach",
    "caret",
    "randomForest",
    "glmnet",
    "e1071"
)

install.packages(packages, lib=lib_path, repos="https://cran.r-project.org")

# Verify installation
installed <- installed.packages()
cat("\nInstalled packages:\n")
print(installed[packages, "Version"])
EOF

job-nanny Rscript install_packages.R

Bioconductor

install_bioc.sh
#!/bin/bash
#SBATCH -J install_bioc
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G

module load R/4.0.2

cat > install_bioc.R << 'EOF'
if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

# Install Bioconductor packages
BiocManager::install(c(
    "Biostrings",
    "GenomicRanges",
    "DESeq2",
    "edgeR",
    "limma",
    "clusterProfiler",
    "pathview"
))

# Verify installation
library(Biostrings)
library(DESeq2)
cat("Bioconductor packages installed successfully!\n")
EOF

job-nanny Rscript install_bioc.R

References

See also