R
In this section:
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
Documentation: https://www.r-project.org/other-docs.html
Bioconductor: https://www.bioconductor.org/
RStudio Cheat Sheets: https://www.rstudio.com/resources/cheatsheets/
See also
Anaconda - Python for data science
MATLAB - Numerical computing environment
Running Simulations - How to submit jobs