
R is a language and environment for statistical computing and graphics. It can be considered an open source decendant of the S language which was developed by Chambers and colleagues at Bell Laboratories in the 1970s.
R is highly extensible and provides a wide variety of modern statistical analysis methods combined with excellent graphical visualization capabilities embedded in a programming language that supports procedural, functuional, and object oriented programming styles. R natively provides operators for calculations on arrays and matrices.
While individual single threaded R code is not expected to run any faster in an interactive session on a compute node than it would run on a modern desktop, Biowulf allows users to run many R jobs concurrently or take advantage of the speedup provided by parallelizing R code to a much greater degree than possible on a single workstation.
On biowulf, R modules are available for the minor releases (e.g. 3.5) which will contain the newest patch level releases (e.g. 3.5.3).
- Jun 2019: R/3.6.0 becomes the default R installation
- Feb 2019: R/3.5.2 becomes the default R installation
- Jun 2018: Cluster update from RHEL6 to RHEL7
-
- R sessions are not allowed on helix any more.
- R is compiled against MKL for improved performance
- Implicit multithreading
-
R can make use of implicit multithreading via two
different mechanisms. One of them is regulated by the
OMP_NUM_THREADS
environment variable which is set to 1 by the R modules because leaving this variable unset can lead to R using as many threads as there are CPUs on a compute node thus overloading jobs. If you know your code can make effective use of those threads you can explicitly setOMP_NUM_THREADS
to greated than 1 after loading the module. However, only a subset of code will be able to take advantage of this - don't expect an automatic speed increase. parallel::detectCores()
always detects all CPUs on a node-
R using one of the parallel packages (parallel, doParallel, ...) often overload
their job allocation because they are using the
detectCores()
function from the parallel package to determine how many worker processes to use. However, this function returns the number of physical CPUs on a compute node irrespective of how many have been allocated to a job. Therefore, if not all CPUs are allocated to a job the job will be overloaded and perform poorly. See the section on the parallel package for more detail. BiocParallel
by default tries to use most CPUs on a node-
BiocParallel
is not aware of slurm and by default tries to use most of the CPUs on a node irrespetive of the slurm allocation. This can lead to overloaded jobs. See the section on the BiocParallel package for more information on how to avoid this. - Poor scaling of parallel code
- Don't assume that you should allocate as many CPUs as possible to a parallel workload. Parallel efficiency often drops and in some cases allocating more CPUs may actually extend runtimes. If you use/implement parallel algorithms please measure scaling before submitting large numbers of such jobs.
- Can't install packages to my home directory
-
R will attempt to install packages to
~/R/<ver>/library
where ver is the two digit version of R (e.g. 3.5). However, R won't automatically create that directory and in its absence will try to install to the central packge library which will fail. To install packages in your home directory manually create~/R/<ver>/library
first. - AnnotationHub or ExperimentHub error
No internet connection
-
The AnnotationHub and ExperimentHub packages and packages depending on them need to connect to the
internet via a proxy. When using AnnotationHub or ExperimentHub directly, a proxy can be specified
explicitly in the call to set up the Hub. However, if they are used indirectly that is not possible.
Instead, define the proxy either using environment variables EXPERIMENT_HUB_PROXY/ANNOTATION_HUB_PROXY
or by setting options in R with
setAnnotationHubOption("PROXY", Sys.getenv("http_proxy"))
or the correspondingsetExperimentHubOption
function.
R will automatically use lscratch for temporary files if it has been allocated. Therefore we highly recommend users always allocate a minimal amount of lscratch of 1GB plus whatever lscratch storage is required by your code.
Allocate an interactive session for interactive R work. Note that R sessions are not allowed on the login node nor helix.
[user@biowulf]$ sinteractive salloc.exe: Pending job allocation 46116226 salloc.exe: job 46116226 queued and waiting for resources salloc.exe: job 46116226 has been allocated resources salloc.exe: Granted job allocation 46116226 salloc.exe: Waiting for resource configuration salloc.exe: Nodes cn3144 are ready for job
There may be multiple versions of R available. An easy way of selecting the version is to use modules.To see the modules available, type
[user@cn3144 ~]$ module -r avail '^R$' --------------- /usr/local/lmod/modulefiles ------------------ R/3.4 R/3.4.3 R/3.4.4 R/3.5 (D) R/3.5.0 R/3.5.2
Set up your environment and start up an R session
[user@cn3144 ~]$ module load R/3.5 [user@cn3144 ~]$ R R version 3.5.0 (2018-04-23) -- "Joy in Playing" Copyright (C) 2018 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(tidyverse) ── Attaching packages ─────────────────────────────────────── tidyverse 1.2.1 ── ✔ ggplot2 2.2.1 ✔ purrr 0.2.4 ✔ tibble 1.4.2 ✔ dplyr 0.7.4 ✔ tidyr 0.8.0 ✔ stringr 1.3.0 ✔ readr 1.1.1 ✔ forcats 0.3.0 ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ── ✖ dplyr::filter() masks stats::filter() ✖ dplyr::lag() masks stats::lag() > [...lots of work...] > q() Save workspace image? [y/n/c]: n
A rudimentary graphical interface is available if the sinteractive session was started from a session with X11 forwarding enabled:
[user@cn3144 ~]$ R --gui=Tk
However, RStudio is a much better interface with many advanced features.
Don't forget to exit the interactive session
[user@cn3144 ~]$ exit salloc.exe: Relinquishing job allocation 46116226 [user@biowulf ~]$
Packages installed in the current default R environment
Package | Version |
---|---|
translations | 3.6.1 |
spatial | 7.3-11 |
viridisLite | 0.3.0 |
urltools | 1.7.3 |
trapezoid | 2.0-0 |
polynom | 1.4-0 |
plotly | 4.9.1 |
PheWAS | 0.99.5-3 |
org.Mm.eg.db | 3.10.0 |
oligoClasses | 1.48.0 |
numDeriv | 2016.8-1.1 |
methylumi | 2.32.0 |
mcmc | 0.9-6 |
matrixcalc | 1.0-3 |
latticeExtra | 0.6-28 |
ipred | 0.9-9 |
groHMM | 1.20.0 |
GOSemSim | 2.12.0 |
geosphere | 1.5-10 |
DESeq2 | 1.26.0 |
DEoptimR | 1.0-8 |
DBChIP | 1.30.0 |
cn.mops | 1.32.0 |
chromVAR | 1.8.0 |
BSgenome.Hsapiens.UCSC.hg19 | 1.4.0 |
BPSC | 0.99.2 |
AnnotationForge | 1.28.0 |
TxDb.Celegans.UCSC.ce6.ensGene | 3.2.2 |
strucchange | 1.5-2 |
stabledist | 0.7-1 |
sensitivity | 1.16.3 |
rmarkdown | 2.0 |
ProtGenerics | 1.18.0 |
PMCMR | 4.3 |
pbatR | 2.2-13 |
MultiAssayExperiment | 1.12.0 |
msm | 1.6.7 |
MLEcens | 0.1-4 |
magic | 1.5-9 |
JavaGD | 0.6-1.1 |
GlobalOptions | 0.1.1 |
geiger | 2.0.6.2 |
episensr | 0.9.4 |
ENmix | 1.22.0 |
distillery | 1.0-6 |
compositions | 1.40-3 |
colorspace | 1.4-1 |
caTools | 1.17.1.3 |
BSgenome.Scerevisiae.UCSC.sacCer1 | 1.4.0 |
BSgenome.Hsapiens.UCSC.hg18 | 1.3.1000 |
bold | 0.9.0 |
blob | 1.2.0 |
ALL | 1.28.0 |
ADGofTest | 0.3 |
splines | 3.6.1 |
statmod | 1.4.32 |
rcmdcheck | 1.3.3 |
rae230aprobe | 2.18.0 |
pvca | 1.26.0 |
proto | 1.0.0 |
oompaData | 3.1.1 |
ks | 1.11.6 |
keras | 2.2.5.0 |
jsonlite | 1.6 |
httr | 1.4.1 |
Heatplus | 2.32.0 |
foreach | 1.4.7 |
forcats | 0.4.0 |
fgsea | 1.12.0 |
farver | 2.0.1 |
FactoMineR | 2.0 |
expm | 0.999-4 |
europepmc | 0.3 |
data.table | 1.12.8 |
Cubist | 0.2.2 |
CNEr | 1.22.0 |
clusterRepro | 0.9 |
BSgenome.Scerevisiae.UCSC.sacCer2 | 1.4.0 |
BiocManager | 1.30.10 |
bibtex | 0.4.2 |
xfun | 0.11 |
subSeq | 1.16.0 |
spam | 2.5-1 |
snowFT | 1.6-0 |
NOISeq | 2.30.0 |
NMF | 0.21.0 |
logicFS | 2.6.0 |
Lmoments | 1.3-1 |
LGEWIS | 1.1 |
IsoformSwitchAnalyzeR | 1.8.0 |
interval | 1.1-0.1 |
fit.models | 0.5-14 |
ExomeDepth | 1.1.12 |
DBI | 1.0.0 |
ChIPpeakAnno | 3.20.0 |
CGEN | 3.22.0 |
BiocGenerics | 0.32.0 |
bindata | 0.9-19 |
beadarray | 2.36.0 |
codetools | 0.2-16 |
sna | 2.5 |
sgeostat | 1.0-27 |
RRPP | 0.4.3 |
R.methodsS3 | 1.7.1 |
remoter | 0.4-0 |
PhysicalActivity | 0.2-2 |
pheatmap | 1.0.12 |
multicool | 0.1-11 |
MplusAutomation | 0.7-3 |
lmerTest | 3.1-1 |
lifecycle | 0.1.0 |
lazyeval | 0.2.2 |
lars | 1.2 |
Haplin | 7.1.0 |
DaMiRseq | 1.10.0 |
commonmark | 1.7 |
ade4 | 1.7-13 |
parallel | 3.6.1 |
tfdatasets | 1.13.1 |
TCGA2STAT | 1.2 |
ROpenCVLite | 0.3.410 |
remotes | 2.1.0 |
rBayesianOptimization | 1.1.0 |
quantreg | 5.54 |
plyr | 1.8.5 |
pbs | 1.1 |
org.Hs.eg.db | 3.10.0 |
natserv | 0.3.0 |
naivebayes | 0.9.6 |
monocle | 2.14.0 |
mize | 0.2.3 |
maps | 3.3.0 |
lmtest | 0.9-37 |
interactiveDisplayBase | 1.24.0 |
flux | 0.3-0 |
flexmix | 2.3-15 |
DAAG | 1.22.1 |
CODEX2 | 1.3.0 |
bindr | 0.1.1 |
Bhat | 0.9-10 |
bayesplot | 1.7.1 |
accelerometry | 3.1.2 |
WikidataR | 1.4.0 |
vipor | 0.4.5 |
TxDb.Rnorvegicus.UCSC.rn4.ensGene | 3.2.2 |
tkWidgets | 1.64.0 |
spls | 2.2-3 |
shinyFiles | 0.7.5 |
sesame | 1.4.0 |
RInside | 0.2.15 |
refund | 0.1-21 |
readr | 1.3.1 |
reactome.db | 1.70.0 |
rainbow | 3.6 |
QuantPsyc | 1.5 |
PMA | 1.1 |
packcircles | 0.3.3 |
libcoin | 1.0-5 |
IRkernel | 1.1 |
IlluminaHumanMethylation27kanno.ilmn12.hg19 | 0.6.0 |
DESeq | 1.38.0 |
ctsem | 3.0.8 |
cn.farms | 1.34.0 |
cli | 2.0.0 |
BiocSingular | 1.2.0 |
biclust | 2.0.1 |
bayestestR | 0.4.0 |
stats4 | 3.6.1 |
base | 3.6.1 |
tclust | 1.4-1 |
synthpop | 1.5-1 |
SNPlocs.Hsapiens.dbSNP142.GRCh37 | 0.99.5 |
SNPchip | 2.32.0 |
sleuth | 0.30.0 |
shinydashboard | 0.7.1 |
sampling | 2.8 |
S4Vectors | 0.24.1 |
RMTstat | 0.3 |
raster | 3.0-7 |
pls | 2.7-2 |
oz | 1.0-21 |
ordinal | 2019.4-25 |
mitools | 2.4 |
miniUI | 0.1.1.1 |
meta | 4.9-7 |
gsubfn | 0.7 |
grr | 0.9.5 |
GOstats | 2.52.0 |
ggpubr | 0.2.4 |
genoset | 1.42.0 |
gdata | 2.18.0 |
future.apply | 1.3.0 |
edgeR | 3.28.0 |
dfoptim | 2018.2-1 |
ChIPseeker | 1.22.0 |
bitops | 1.0-6 |
affycomp | 1.62.0 |
class | 7.3-15 |
WriteXLS | 5.0.0 |
waveslim | 1.7.5.1 |
TxDb.Hsapiens.UCSC.hg19.knownGene | 3.2.2 |
tsna | 0.3.0 |
thgenetics | 0.4-2 |
tensorA | 0.36.1 |
spdep | 1.1-3 |
sfit | 0.3.1 |
RNifti | 1.0.1 |
RMediation | 1.1.4 |
readxl | 1.3.1 |
RcppRoll | 0.3.0 |
RcppProgress | 0.4.1 |
RcmdrPlugin.IPSUR | 0.2-1.1 |
pROC | 1.15.3 |
PBSmodelling | 2.68.8 |
partykit | 1.2-5 |
GPArotation | 2014.11-1 |
ggformula | 0.9.2 |
ggeffects | 0.13.0 |
extraDistr | 1.8.11 |
emmeans | 1.4.3.01 |
DMRcatedata | 2.2.0 |
copynumber | 1.26.0 |
cmprsk | 2.2-9 |
bbmle | 1.0.20 |
BatchJobs | 1.8 |
batchelor | 1.2.2 |
batch | 1.1-5 |
additivityTests | 1.1-4 |
UpSetR | 1.4.0 |
timsac | 1.3.6 |
tergm | 3.6.1 |
svd | 0.5 |
subplex | 1.5-4 |
sROC | 0.1-2 |
sparsesvd | 0.2 |
snow | 0.4-3 |
rversions | 2.0.1 |
plotmo | 3.5.6 |
plgem | 1.58.0 |
pd.genomewidesnp.6 | 3.14.1 |
parathyroidSE | 1.24.0 |
oompaBase | 3.2.9 |
manhattanly | 0.2.0 |
maanova | 1.56.0 |
leafcutter | 0.2.8 |
irr | 0.84.1 |
IRdisplay | 0.7.0 |
gmodels | 2.18.1 |
Exact | 2.0 |
DRIMSeq | 1.14.0 |
diffusionMap | 1.2.0 |
bit | 1.1-14 |
zlibbioc | 1.32.0 |
withr | 2.1.2 |
tidyr | 1.0.0 |
spatstat.data | 1.4-0 |
RWiener | 1.3-1 |
RSQLite | 2.1.4 |
RcppAnnoy | 0.0.14 |
RandomFields | 3.3.7 |
qvcalc | 1.0.1 |
perm | 1.0-0.0 |
pbdMPI | 0.4-2 |
oro.nifti | 0.9.1 |
MetaSKAT | 0.71 |
MAGeCKFlute | 1.6.0 |
lava | 1.6.6 |
intervals | 0.15.1 |
haploR | 3.0.1 |
FlowSorted.Blood.EPIC | 1.4.1 |
EBSeq | 1.26.0 |
e1071 | 1.7-3 |
zebrafishcdf | 2.18.0 |
vroom | 1.0.2 |
TxDb.Mmusculus.UCSC.mm9.knownGene | 3.2.2 |
TeachingDemos | 2.10 |
spp | 1.16.0 |
SARTools | 1.7.1 |
RNOmni | 0.7.1 |
R.matlab | 3.6.2 |
R2WinBUGS | 2.1-21 |
quantmod | 0.4-15 |
pastecs | 1.3.21 |
nplplot | 4.5 |
mutoss | 0.1-12 |
markdown | 1.1 |
hdf5r | 1.3.0 |
glmpath | 0.98 |
ggm | 2.3 |
fansi | 0.4.0 |
extRemes | 2.0-11 |
clue | 0.3-57 |
CHsharp | 0.4 |
chipseq | 1.36.0 |
tsne | 0.1-3 |
tripack | 1.3-8 |
timeSeries | 3042.102 |
TailRank | 3.2.1 |
sva | 3.34.0 |
SummarizedExperiment | 1.16.0 |
rsample | 0.0.5 |
pec | 2019.11.03 |
orthogonalsplinebasis | 0.1.6 |
modeltools | 0.2-22 |
maxstat | 0.7-25 |
MatchIt | 3.0.2 |
ICsurv | 1.0 |
graph | 1.64.0 |
glmmML | 1.1.0 |
ggthemes | 4.2.0 |
ggdendro | 0.1-20 |
GenomicAlignments | 1.22.1 |
genetics | 1.3.8.1.2 |
fail | 1.3 |
enpls | 6.1 |
DNAcopy | 1.60.0 |
discretization | 1.0-1 |
colorRamps | 2.3 |
colorfulVennPlot | 2.4 |
brew | 1.0-6 |
Zelig | 5.1.6.1 |
vsn | 3.54.0 |
tiff | 0.1-5 |
survminer | 0.4.6 |
survJamda.data | 1.0.2 |
sQTLseekeR | 2.1 |
rlecuyer | 0.3-5 |
relimp | 1.0-5 |
RcppNumerical | 0.4-0 |
rafalib | 1.0.0 |
pd.hugene.2.0.st | 3.14.1 |
pan | 1.6 |
mygene | 1.22.0 |
mmap | 0.6-17 |
listenv | 0.8.0 |
gh | 1.0.1 |
geonames | 0.999 |
FSelector | 0.31 |
fracdiff | 1.5-0 |
ELMER.data | 2.10.0 |
EGSEA | 1.14.0 |
DynDoc | 1.64.0 |
dnet | 1.1.5 |
denstrip | 1.5.4 |
CpGassoc | 2.60 |
ConsensusClusterPlus | 1.50.0 |
CODEX | 1.18.0 |
beachmat | 2.2.1 |
tcltk | 3.6.1 |
KernSmooth | 2.23-16 |
wateRmelon | 1.30.0 |
TCGAbiolinks | 2.14.0 |
ROTS | 1.14.0 |
questionr | 0.7.0 |
prabclus | 2.3-1 |
pkgload | 1.0.2 |
pkgbuild | 1.0.6 |
orthopolynom | 1.0-5 |
NADA | 1.6-1 |
logcondens | 2.1.5 |
KEGGgraph | 1.46.0 |
JADE | 2.0-2 |
IHW | 1.14.0 |
gsl | 2.1-6 |
ggstance | 0.3.3 |
GenVisR | 1.18.1 |
gdtools | 0.2.1 |
gamm4 | 0.2-5 |
fdrtool | 1.2.15 |
epiR | 1.0-10 |
dygraphs | 1.1.1.6 |
dmrseq | 1.6.0 |
blockmodeling | 0.3.4 |
utils | 3.6.1 |
graphics | 3.6.1 |
zCompositions | 1.3.3-1 |
vioplot | 0.3.4 |
tidyverse | 1.3.0 |
TCGAbiolinksGUI | 1.12.0 |
systemPipeR | 1.20.0 |
ruv | 0.9.7.1 |
robust | 0.4-18.1 |
Rfit | 0.23.0 |
RefPlus | 1.56.0 |
rbenchmark | 1.0.0 |
mutSignatures | 1.2 |
moments | 0.14 |
minet | 3.44.0 |
locfit | 1.5-9.1 |
inline | 0.3.15 |
idr | 1.2 |
hgu95av2 | 2.2.0 |
hgu133plus2probe | 2.18.0 |
getopt | 1.20.3 |
geomorph | 3.1.3 |
fftw | 1.0-5 |
falcon | 0.2 |
evd | 2.3-3 |
enrichR | 2.1 |
dropbead | 0.3.1 |
diptest | 0.75-7 |
dimRed | 0.2.3 |
dendextend | 1.13.2 |
ChromHeatMap | 1.40.0 |
chopsticks | 1.52.0 |
CCA | 1.2 |
MASS | 7.3-51.4 |
grDevices | 3.6.1 |
xopen | 1.0.0 |
truncnorm | 1.0-8 |
tidyselect | 0.2.5 |
systemfit | 1.1-24 |
seqLogo | 1.52.0 |
rvest | 0.3.5 |
robustbase | 0.93-5 |
rjson | 0.2.20 |
RApiSerialize | 0.1.0 |
randomForestSRC | 2.9.2 |
qs | 0.20.2 |
praise | 1.0.0 |
plot3D | 1.1.1 |
optparse | 1.6.4 |
mclust | 5.4.5 |
manipulateWidget | 0.10.0 |
logistf | 1.23 |
KMsurv | 0.1-5 |
INPower | 1.22.0 |
HilbertVis | 1.44.0 |
hash | 2.2.6.1 |
gyriq | 1.0.2 |
ggrepel | 0.8.1 |
ggbio | 1.34.0 |
geometry | 0.4.5 |
EMCluster | 0.2-12 |
EBSeqHMM | 1.20.0 |
DMRcate | 2.0.2 |
coxphf | 1.13 |
corpcor | 1.6.9 |
ClusterR | 1.2.1 |
brms | 2.10.0 |
bridgesampling | 0.7-2 |
ASSET | 2.4.0 |
uwot | 0.1.5 |
spData | 0.3.2 |
SKAT | 1.3.2.1 |
shinystan | 2.5.0 |
scran | 1.14.5 |
rotl | 3.0.10 |
rex | 1.1.2 |
RCircos | 1.2.1 |
qpdf | 1.1 |
psych | 1.8.12 |
progress | 1.2.2 |
PBSmapping | 2.72.1 |
mnormt | 1.5-5 |
miscTools | 0.6-26 |
MassSpecWavelet | 1.52.0 |
LSD | 4.0-0 |
kernlab | 0.9-29 |
Imetagene | 1.16.0 |
iCluster | 2.1.0 |
HIBAG | 1.22.0 |
HI | 0.4 |
h2o | 3.26.0.2 |
gss | 2.1-10 |
grpreg | 3.2-1 |
gbRd | 0.4-11 |
clisymbols | 1.2.0 |
baySeq | 2.20.0 |
batchtools | 0.9.11 |
airway | 1.6.0 |
TH.data | 1.0-10 |
survival | 3.1-8 |
supraHex | 1.24.0 |
SPAtest | 3.0.0 |
space | 0.1-1.1 |
Seurat | 3.1.2 |
sctransform | 0.2.0 |
rtracklayer | 1.46.0 |
Rmisc | 1.5 |
reprex | 0.3.0 |
ncbit | 2013.03.29 |
micEcon | 0.6-14 |
KEGG.db | 3.2.3 |
hexbin | 1.28.0 |
colortools | 0.1.5 |
callr | 3.4.0 |
bsseq | 1.22.0 |
apeglm | 1.8.0 |
XML | 3.98-1.20 |
vows | 0.5 |
Rttf2pt1 | 1.3.7 |
ReactomePA | 1.30.0 |
pctGCdata | 0.3.0 |
outliers | 0.14 |
nnls | 1.4 |
mlr | 2.16.0 |
mlmRev | 1.0-7 |
maptools | 0.9-9 |
inum | 1.0-1 |
illuminaio | 0.28.0 |
hopach | 2.46.0 |
exomeCopy | 1.32.0 |
esATAC | 1.8.0 |
densityClust | 0.3 |
crlmm | 1.44.0 |
cobs | 1.3-3 |
bit64 | 0.9-7 |
annaffy | 1.58.0 |
tidygraph | 1.1.2 |
sequenza | 3.0.0 |
rpf | 0.62 |
RJSONIO | 1.3-1.3 |
rGADEM | 2.34.0 |
RcmdrPlugin.TeachingDemos | 1.1-0 |
RcmdrMisc | 2.5-1 |
Rcmdr | 2.6-1 |
plier | 1.56.0 |
pbdDMAT | 0.5-1 |
oligo | 1.50.0 |
mvbutils | 2.8.232 |
LDheatmap | 0.99-7 |
irlba | 2.3.3 |
gtools | 3.8.1 |
git2r | 0.26.1 |
gage | 2.36.0 |
Epi | 2.40 |
eha | 2.7.6 |
easyRNASeq | 2.22.2 |
dqrng | 0.2.1 |
clipr | 0.7.0 |
cghMCR | 1.44.0 |
Biostrings | 2.54.0 |
ada | 2.0-5 |
zip | 2.0.4 |
yaml | 2.2.0 |
xlsx | 0.6.1 |
threejs | 0.3.1 |
speedglm | 0.3-2 |
spacetime | 1.2-2 |
Rpairix | 0.3.7 |
Ringo | 1.50.0 |
Rdpack | 0.11-0 |
rae230acdf | 2.18.0 |
networkD3 | 0.4 |
MEGENA | 1.3.7 |
genefilter | 1.68.0 |
epitools | 0.5-10 |
ensemblVEP | 1.28.0 |
EDASeq | 2.20.0 |
dynamicTreeCut | 1.63-1 |
DropletUtils | 1.6.1 |
aroma.core | 3.2.0 |
cluster | 2.1.0 |
snpStats | 1.36.0 |
sfsmisc | 1.1-4 |
semTools | 0.5-2 |
riskRegression | 2019.11.03 |
Rhtslib | 1.18.0 |
R.cache | 0.14.0 |
qap | 0.1-1 |
pathview | 1.26.0 |
pander | 0.6.3 |
optmatch | 0.9-13 |
optextras | 2016-8.8 |
motifmatchr | 1.8.0 |
ipw | 1.0-11 |
ini | 0.3.1 |
Illumina450ProbeVariants.db | 1.22.0 |
frma | 1.38.0 |
ExperimentHub | 1.12.0 |
doFuture | 0.8.2 |
DDRTree | 0.1.5 |
cqn | 1.32.0 |
contrast | 0.21 |
aggregation | 1.0.1 |
VGAM | 1.1-2 |
vcd | 1.4-4 |
SuppDists | 1.1-9.4 |
supclust | 1.0-7 |
SNPlocs.Hsapiens.dbSNP.20120608 | 0.99.11 |
slam | 0.1-46 |
shinythemes | 1.1.2 |
R.rsp | 0.43.2 |
rprojroot | 1.3-2 |
Rook | 1.1-1 |
pwr | 1.2-2 |
PSCBS | 0.65.0 |
prediction | 0.3.14 |
pixmap | 0.4-11 |
nycflights13 | 1.0.1 |
MotifDb | 1.28.0 |
MAST | 1.12.0 |
mapproj | 1.2.6 |
lsmeans | 2.30-0 |
Kendall | 2.2 |
HardyWeinberg | 1.6.3 |
golubEsets | 1.28.0 |
glmnet | 3.0-2 |
futile.logger | 1.4.3 |
ecodist | 2.0.1 |
EBarrays | 2.50.0 |
devEMF | 3.7 |
cOde | 1.0.0 |
argon2 | 0.2-0 |
boot | 1.3-23 |
xmlparsedata | 1.0.3 |
XLConnectJars | 0.2-15 |
TFMPvalue | 0.0.8 |
ROC | 1.62.0 |
RCurl | 1.95-4.12 |
randtests | 1.0 |
mipfp | 3.2.1 |
HTqPCR | 1.40.0 |
hoardr | 0.5.2 |
haven | 2.2.0 |
gRbase | 1.8-4.5 |
GeneRegionScan | 1.42.0 |
fmsb | 0.6.3 |
FlowSorted.CordBloodCombined.450k | 1.2.1 |
FEM | 3.14.0 |
fastmap | 1.0.1 |
fastcluster | 1.1.25 |
DT | 0.10 |
doBy | 4.6-3 |
ComplexHeatmap | 2.2.0 |
verification | 1.42 |
tinytex | 0.18 |
spatstat.utils | 1.15-0 |
rootSolve | 1.8.1 |
RcppHNSW | 0.2.0 |
RandomFieldsUtils | 0.5.3 |
qtl | 1.44-9 |
plm | 2.2-0 |
pd.hg.u133.plus.2 | 3.12.0 |
pbkrtest | 0.4-7 |
PADOG | 1.28.0 |
iterators | 1.0.12 |
ica | 1.0-2 |
hugene20sttranscriptcluster.db | 8.7.0 |
httpuv | 1.5.2 |
HMMcopy | 1.28.0 |
ggfortify | 0.4.8 |
GetoptLong | 0.1.7 |
fission | 1.6.0 |
fibroEset | 1.28.0 |
emdbook | 1.3.11 |
ELMER | 2.10.0 |
drc | 3.0-1 |
dichromat | 2.0-0 |
Biobase | 2.46.0 |
bigmemory.sri | 0.1.3 |
assertthat | 0.2.1 |
udunits2 | 0.13 |
selectr | 0.4-2 |
ROCR | 1.0-7 |
rJava | 0.9-11 |
permute | 0.9-5 |
pcaMethods | 1.78.0 |
pbdZMQ | 0.3-3 |
pasilla | 1.14.0 |
openssl | 1.4.1 |
npsurv | 0.4-0 |
np | 0.60-9 |
mvmeta | 1.0.3 |
HTMLUtils | 0.1.7 |
hthgu133aprobe | 2.18.0 |
Gviz | 1.30.0 |
ggbeeswarm | 0.6.0 |
GenSA | 1.1.7 |
FDb.InfiniumMethylation.hg19 | 2.2.0 |
dvmisc | 1.1.3 |
directlabels | 2018.05.22 |
deconstructSigs | 1.8.0 |
csaw | 1.20.0 |
config | 0.3 |
colourpicker | 1.0 |
car | 3.0-5 |
brglm | 0.6.2 |
BiocNeighbors | 1.4.1 |
ballgown | 2.18.0 |
AnnotationDbi | 1.48.0 |
animation | 2.6 |
datasets | 3.6.1 |
wordcloud | 2.6 |
SDMTools | 1.1-221.2 |
sandwich | 2.5-1 |
pspline | 1.0-18 |
methylKit | 1.12.0 |
memoise | 1.1.0 |
isva | 1.9 |
isotone | 1.1-0 |
IlluminaHumanMethylation450kmanifest | 0.4.0 |
FlowSorted.CordBlood.450k | 1.14.0 |
FDb.InfiniumMethylation.hg18 | 2.2.0 |
DOSE | 3.12.0 |
debugme | 1.1.0 |
corrgram | 1.13 |
ChIPsim | 1.40.0 |
c3net | 1.1.1 |
bio3d | 2.4-0 |
base64enc | 0.1-3 |
awsMethods | 1.1-1 |
akima | 0.6-2 |
admixturegraph | 1.0.2 |
zoo | 1.8-6 |
triangle | 0.12 |
tis | 1.37.1 |
splancs | 2.01-40 |
signal | 0.7-6 |
scRNAseq | 2.0.2 |
RWekajars | 3.9.3-2 |
rngtools | 1.4 |
RMySQL | 0.10.17 |
Rcgmin | 2013-2.21 |
pd.mogene.1.0.st.v1 | 3.14.1 |
parameters | 0.3.0 |
mvQuad | 1.0-6 |
mouse4302.db | 3.2.3 |
mcmcplots | 0.4.3 |
marray | 1.64.0 |
graphite | 1.32.0 |
GGally | 1.4.0 |
deldir | 0.1-23 |
coMET | 1.18.0 |
bmm | 0.3.1 |
ape | 5.3 |
actuar | 2.3-3 |
whisker | 0.4 |
variancePartition | 1.16.0 |
utf8 | 1.1.4 |
TxDb.Hsapiens.UCSC.hg18.knownGene | 3.2.2 |
tweenr | 1.0.1 |
rncl | 0.8.3 |
random | 0.2.6 |
prettyunits | 1.0.2 |
poweRlaw | 0.70.2 |
openxlsx | 4.1.4 |
NORMT3 | 1.0-3 |
MatrixEQTL | 2.2 |
hunspell | 3.0 |
hthgu133acdf | 2.18.0 |
GSVA | 1.34.0 |
ggraph | 2.0.0 |
gamlss.data | 5.1-4 |
flashClust | 1.01-2 |
ergm | 3.10.4 |
downloader | 0.4 |
bayesm | 3.1-4 |
AnnotationFilter | 1.10.0 |
TitanCNA | 1.24.0 |
Sushi | 1.24.0 |
sqldf | 0.4-11 |
seriation | 1.2-8 |
rstan | 2.19.2 |
rphast | 1.6.9 |
ResourceSelection | 0.3-5 |
mice | 3.6.0 |
lubridate | 1.7.4 |
loo | 2.1.0 |
lme4 | 1.1-21 |
GO.db | 3.10.0 |
genbankr | 1.14.0 |
geepack | 1.3-1 |
gaia | 2.30.0 |
Formula | 1.2-3 |
DSS | 2.34.0 |
dr | 3.0.10 |
DiceKriging | 1.5.6 |
cummeRbund | 2.28.0 |
catmap | 1.6.4 |
testthat | 2.3.1 |
splitstackshape | 1.4.8 |
safe | 3.26.0 |
rslurm | 0.5.0 |
RnBeads | 2.4.0 |
rglwidget | 0.2.1 |
readstata13 | 0.9.2 |
RcppEigen | 0.3.3.7.0 |
pryr | 0.1.4 |
phyloseq | 1.30.0 |
optimx | 2018-7.10 |
opencv_lib | unknown |
modelr | 0.1.5 |
MLInterfaces | 1.66.0 |
MiST | 1.0 |
ISwR | 2.0-7 |
ineq | 0.2-13 |
hu6800probe | 2.18.0 |
glue | 1.3.1 |
glmm | 1.3.0 |
GenomicFeatures | 1.38.0 |
doMC | 1.3.6 |
diffloop | 1.14.0 |
diffHic | 1.18.0 |
dendsort | 0.3.3 |
dbplyr | 1.4.2 |
coin | 1.3-1 |
checkmate | 1.9.4 |
calibrate | 1.7.5 |
BSgenome.Mmusculus.UCSC.mm9 | 1.4.0 |
binom | 1.1-1 |
stringi | 1.4.3 |
RUnit | 0.4.32 |
rrcov | 1.4-9 |
RPMM | 1.25 |
RIPSeeker | 1.26.0 |
rgdal | 1.4-8 |
rARPACK | 0.11-0 |
R6 | 2.4.1 |
qvalue | 2.18.0 |
plogr | 0.2.0 |
nabor | 0.5.0 |
multidplyr | 0.0.0.9000 |
laeken | 0.5.0 |
klaR | 0.6-14 |
infotheo | 1.2.0 |
hdrcde | 3.3 |
glmmTMB | 0.2.3 |
ggmap | 3.0.0 |
genalg | 0.2.0 |
expint | 0.1-6 |
effectsize | 0.0.1 |
dynlm | 0.3-6 |
DiffBind | 2.14.0 |
DEXSeq | 1.32.0 |
DescTools | 0.99.31 |
Deriv | 4.0 |
crul | 0.9.0 |
cowplot | 1.0.0 |
base64url | 1.4 |
ars | 0.6 |
AlgDesign | 1.2.0 |
stats | 3.6.1 |
wheatmap | 0.1.0 |
uuid | 0.1-2 |
uroot | 2.1-0 |
TxDb.Dmelanogaster.UCSC.dm3.ensGene | 3.2.2 |
tmvtnorm | 1.4-10 |
TMB | 1.7.15 |
tfautograph | 0.1.0 |
rhdf5 | 2.30.1 |
regioneR | 1.18.0 |
PureCN | 1.16.0 |
pbivnorm | 0.6.0 |
nloptr | 1.2.1 |
networkDynamic | 0.10.0 |
leaps | 3.0 |
gpclib | 1.5-5 |
globaltest | 5.40.0 |
gam | 1.16.1 |
fs | 1.3.1 |
ffpe | 1.30.0 |
fastseg | 1.32.0 |
DO.db | 2.9 |
DirichletMultinomial | 1.28.0 |
ChAMP | 2.16.0 |
agricolae | 1.3-1 |
StanHeaders | 2.19.0 |
sjlabelled | 1.1.1 |
rio | 0.5.16 |
pscl | 1.5.2 |
performance | 0.4.2 |
paxtoolsr | 1.20.0 |
numbers | 0.7-5 |
NLP | 0.2-0 |
network | 1.16.0 |
multtest | 2.42.0 |
minpack.lm | 1.2-1 |
impute | 1.60.0 |
IlluminaHumanMethylation27k.db | 1.4.8 |
GIGrvg | 0.5 |
genoPlotR | 0.8.9 |
fdapace | 0.5.1 |
effects | 4.1-4 |
doParallel | 1.0.15 |
distr | 2.8.0 |
devtools | 2.2.1 |
deSolve | 1.25 |
DelayedMatrixStats | 1.8.0 |
DCGL | 2.1.2 |
crayon | 1.3.4 |
ChIPQC | 1.22.0 |
bootstrap | 2019.6 |
biomaRt | 2.42.0 |
affyio | 1.56.0 |
Matrix | 1.2-18 |
TCGAbiolinksGUI.data | 1.6.0 |
sys | 3.3 |
stabs | 0.6-3 |
siggenes | 1.60.0 |
sets | 1.0-18 |
rredlist | 0.5.0 |
ReportingTools | 2.26.0 |
qcc | 2.7 |
ps | 1.3.0 |
preprocessCore | 1.48.0 |
pedigreemm | 0.3-3 |
pbdDEMO | 0.3-1 |
nonnest2 | 0.5-2 |
mixtools | 1.1.0 |
lumi | 2.38.0 |
logging | 0.10-108 |
lavaan | 0.6-5 |
igraph | 1.2.4.2 |
GSEABase | 1.48.0 |
GSA | 1.03.1 |
glasso | 1.11 |
ggplot2 | 3.2.1 |
GenomicDistributions | 0.6 |
fda | 2.4.8 |
classInt | 0.4-2 |
ChIPseqR | 1.40.0 |
cellranger | 1.1.0 |
apcluster | 1.4.8 |
AIM | 1.01 |
xtable | 1.8-4 |
VariantAnnotation | 1.32.0 |
TFBSTools | 1.24.0 |
taRifx | 1.0.6.1 |
survMisc | 0.5.5 |
SuperLearner | 2.0-26 |
snakecase | 0.11.0 |
sm | 2.2-5.6 |
session | 1.0.3 |
rstanarm | 2.19.2 |
RSNNS | 0.4-12 |
Rsamtools | 2.2.1 |
phyclust | 0.1-28 |
MBESS | 4.6.0 |
manipulate | 1.0.1 |
IlluminaHumanMethylation450kanno.ilmn12.hg19 | 0.6.0 |
goftest | 1.2-2 |
GenomicRanges | 1.38.0 |
dismo | 1.1-4 |
CNTools | 1.42.0 |
BSgenome.Hsapiens.1000genomes.hs37d5 | 0.99.1 |
BRAIN | 1.32.0 |
BBmisc | 1.11 |
BB | 2019.10-1 |
AllelicImbalance | 1.24.0 |
xtermStyle | 3.0.5 |
widgetTools | 1.64.0 |
ritis | 0.8.0 |
RcppGSL | 0.3.7 |
pvclust | 2.2-0 |
processx | 3.4.1 |
parallelMap | 1.4 |
optimsimplex | 1.0-7 |
OceanView | 1.0.4 |
nleqslv | 3.3.2 |
mouse4302cdf | 2.18.0 |
merTools | 0.5.0 |
Matching | 4.9-6 |
maftools | 2.2.0 |
linprog | 0.9-2 |
jomo | 2.6-10 |
iotools | 0.2-5 |
htmlTable | 1.13.3 |
HSMMSingleCell | 1.6.0 |
HSAUR2 | 1.1-17 |
gtable | 0.3.0 |
GenomeInfoDbData | 1.2.2 |
gee | 4.13-20 |
gamlss.dist | 5.1-5 |
fpc | 2.2-3 |
falconx | 0.2 |
EGSEAdata | 1.14.0 |
dbscan | 1.1-5 |
caret | 6.0-84 |
BSgenome.Dmelanogaster.UCSC.dm2 | 1.4.0 |
BiasedUrn | 1.07 |
BANOVA | 1.1.4 |
Vennerable | 3.1.0.9000 |
vctrs | 0.2.0 |
truncdist | 1.0-2 |
tmvnsim | 1.0-2 |
snowfall | 1.84-6.1 |
seqinr | 3.6-1 |
rematch | 1.0.1 |
Rbowtie2 | 1.8.0 |
randomForest | 4.6-14 |
PolynomF | 2.0-2 |
org.Rn.eg.db | 3.10.0 |
MLmetrics | 1.1.1 |
lmm | 1.2 |
labeling | 0.3 |
jackstraw | 1.3 |
fastGHQuad | 1.0 |
DEoptim | 2.2-4 |
CircStats | 0.2-6 |
BubbleTree | 2.16.0 |
BitSeq | 1.30.0 |
bdsmatrix | 1.3-3 |
BAC | 1.46.0 |
afex | 0.25-1 |
xts | 0.11-2 |
taxize | 0.9.91 |
sn | 1.5-4 |
rstantools | 2.0.0 |
ranger | 0.11.2 |
OrganismDbi | 1.28.0 |
OpenMx | 2.15.5 |
OpenImageR | 1.1.6 |
opencv | 0.1 |
nucleR | 2.18.1 |
NanoStringNorm | 1.2.1 |
mouse4302frmavecs | 1.5.0 |
minfi | 1.32.0 |
lpsymphony | 1.14.0 |
loomR | 0.2.0 |
lfa | 1.16.0 |
Iso | 0.0-18 |
IPPD | 1.34.0 |
hgu133a2cdf | 2.18.0 |
goseq | 1.38.0 |
futile.options | 1.0.1 |
forecast | 8.10 |
diagram | 1.6.4 |
dexus | 1.26.0 |
AssotesteR | 0.1-10 |
nlme | 3.1-143 |
wikitaxa | 0.3.0 |
statnet.common | 4.3.0 |
sjstats | 0.17.7 |
shinyBS | 0.61 |
segmented | 1.1-0 |
scater | 1.14.5 |
rvcheck | 0.1.7 |
reshape2 | 1.4.3 |
rentrez | 1.2.2 |
PKI | 0.1-5.1 |
pcaPP | 1.9-73 |
pbdSLAP | 0.2-7 |
paran | 1.5.2 |
NuPoP | 1.36.0 |
mda | 0.4-10 |
matrixStats | 0.55.0 |
magrittr | 1.5 |
KEGGdzPathwaysGEO | 1.24.0 |
hgu133plus2cdf | 2.18.0 |
gmp | 0.5-13.5 |
girafe | 1.38.0 |
ggvis | 0.4.5 |
ggsignif | 0.6.0 |
ggjoy | 0.4.1 |
gbm | 2.1.5 |
FME | 1.3.5 |
dummies | 1.5.6 |
DRR | 0.0.3 |
Category | 2.52.1 |
BSgenome.Celegans.UCSC.ce2 | 1.4.0 |
beeswarm | 0.2.3 |
ash | 1.0-15 |
annotate | 1.64.0 |
affycoretools | 1.58.2 |
tools | 3.6.1 |
singscore | 1.6.0 |
sem | 3.1-9 |
SAIGE | 0.36.2 |
RTCGA | 1.16.0 |
rmeta | 3.0 |
RLRsim | 3.1-3 |
repr | 1.0.1 |
pseval | 1.3.1 |
mitml | 0.3-7 |
JGR | 1.8-6 |
heatmaply | 1.0.0 |
gamlss | 5.1-5 |
cubature | 2.0.4 |
biocViews | 1.54.0 |
arrayQualityMetrics | 3.42.0 |
argparse | 2.0.1 |
zipcode | 1.0 |
VennDiagram | 1.6.20 |
TTR | 0.23-5 |
sjPlot | 2.8.1 |
scDD | 1.10.0 |
RWeka | 0.4-41 |
runjags | 2.0.4-4 |
R.oo | 1.23.0 |
Rmpi | 0.6-9 |
RhpcBLASctl | 0.18-205 |
PopSV | 1.1 |
pbmcapply | 1.5.0 |
Matrix.utils | 0.9.7 |
kinship2 | 1.8.4 |
IlluminaHumanMethylationEPICmanifest | 0.3.0 |
gpls | 1.58.0 |
ggrastr | 0.1.7 |
forestplot | 1.9 |
doRNG | 1.7.1 |
dglm | 1.8.3 |
CompQuadForm | 1.4.3 |
chron | 2.3-54 |
biomformat | 1.14.0 |
arrayQuality | 1.64.0 |
xlsxjars | 0.6.1 |
wasabi | 1.0.1 |
vrmlgen | 1.4.9 |
vegan | 2.5-6 |
tximportData | 1.14.0 |
scrime | 1.3.5 |
scde | 2.14.0 |
Rvmmin | 2018-4.17 |
rjags | 4-10 |
PearsonDS | 1.1 |
mvnfast | 0.2.5 |
MCMCpack | 1.4-5 |
itertools | 0.1-3 |
IlluminaHumanMethylationEPICanno.ilm10b2.hg19 | 0.6.0 |
ICS | 1.3-1 |
hmmm | 1.0-4 |
haplo.stats | 1.7.9 |
desc | 1.2.0 |
corrplot | 0.84 |
circlize | 0.4.8 |
Brobdingnag | 1.2-6 |
BiocVersion | 3.10.1 |
BiocFileCache | 1.10.2 |
ber | 4.0 |
visNetwork | 2.0.9 |
tilingArray | 1.64.0 |
spatstat | 1.62-2 |
sitmo | 2.0.1 |
RUVSeq | 1.20.0 |
RItools | 0.1-17 |
pracma | 2.2.5 |
party | 1.3-3 |
pacman | 0.5.1 |
monocle3 | 0.2.0 |
mogene20sttranscriptcluster.db | 8.7.0 |
MESS | 0.5.6 |
LogicReg | 1.6.2 |
grImport | 0.9-3 |
gageData | 2.24.0 |
FourCSeq | 1.20.0 |
earth | 5.1.2 |
commonsMath | 1.2.4 |
Canopy | 1.3.0 |
blme | 1.0-4 |
askpass | 1.1 |
urca | 1.3-0 |
txtplot | 1.0-3 |
TSP | 1.1-7 |
SparseM | 1.78 |
SC3 | 1.14.0 |
rnoaa | 0.9.5 |
RBGL | 1.62.1 |
R2OpenBUGS | 3.2-3.2 |
qlcMatrix | 0.9.7 |
purrr | 0.3.3 |
NBPSeq | 0.3.0 |
msir | 1.3.2 |
mosaicCore | 0.6.0 |
lpSolve | 5.6.13.3 |
lambda.r | 1.2.4 |
labelled | 2.2.1 |
influenceR | 0.1.0 |
iClusterPlus | 1.22.0 |
ggsci | 2.9 |
GenomeInfoDb | 1.23.0 |
doMPI | 0.2.2 |
docopt | 0.6.1 |
dlm | 1.1-5 |
DelayedArray | 0.12.0 |
cyclocomp | 1.1.0 |
clusterProfiler | 3.14.0 |
cicero | 1.4.0 |
trust | 0.1-7 |
SRAdb | 1.48.0 |
signeR | 1.12.0 |
schoolmath | 0.4 |
rlang | 0.4.2 |
Rhdf5lib | 1.8.0 |
RcppArmadillo | 0.9.800.3.0 |
RArcInfo | 0.4-12 |
R2admb | 0.7.16 |
qqman | 0.1.4 |
PopGenome | 2.7.1 |
polspline | 1.1.17 |
optimbase | 1.0-9 |
mlogit | 1.0-2 |
LearnBayes | 2.15.1 |
lawstat | 3.3 |
later | 1.0.0 |
kpmt | 0.1.0 |
kknn | 1.3.1 |
heatmap.plus | 1.3 |
GEOmetadb | 1.48.0 |
gclus | 1.3.2 |
gaussquad | 1.0-2 |
ensembldb | 2.10.2 |
curl | 4.3 |
covr | 3.4.0 |
copula | 0.999-19.1 |
canine2.db | 3.2.3 |
cancerTiming | 3.1.8 |
BH | 1.69.0-1 |
aplpack | 1.3.3 |
acepack | 1.4.1 |
solrium | 1.1.4 |
sf | 0.8-0 |
rsvd | 1.0.2 |
rmutil | 1.1.3 |
rgl | 0.100.30 |
RANN | 2.6.1 |
PROcess | 1.62.0 |
mcbiopi | 1.1.6 |
logitnorm | 0.8.37 |
lintr | 2.0.0 |
leiden | 0.3.1 |
kableExtra | 1.1.0 |
GGIR | 1.11-0 |
geoR | 1.7-5.2.1 |
geneplotter | 1.64.0 |
fishplot | 0.5 |
egg | 0.4.5 |
BradleyTerry2 | 1.1-0 |
BeadDataPackR | 1.38.0 |
Amelia | 1.7.6 |
grid | 3.6.1 |
synchronicity | 1.3.5 |
simpleaffy | 2.62.0 |
shinyjs | 1.0 |
sessioninfo | 1.1.1 |
RcppParallel | 4.4.4 |
proxy | 0.4-23 |
pd.mouse430.2 | 3.12.0 |
mime | 0.7 |
metagene | 2.18.0 |
metafor | 2.1-0 |
MALDIquant | 1.19.3 |
leidenbase | 0.1.0 |
KEGGREST | 1.26.1 |
Hmisc | 4.3-0 |
hapsim | 0.31 |
gsalib | 2.1 |
GenomicDataCommons | 1.10.0 |
cvAUC | 1.1.0 |
CBPS | 0.21 |
BiocStyle | 2.14.2 |
aod | 1.3.1 |
AER | 1.2-8 |
zeallot | 0.1.0 |
tm | 0.7-7 |
SomaticSignatures | 2.22.0 |
scales | 1.1.0 |
rsconnect | 0.8.15 |
R.devices | 2.16.1 |
patchwork | 1.0.0 |
org.Cf.eg.db | 3.10.0 |
nortest | 1.0-4 |
JunctionSeq | 1.16.0 |
isdparser | 0.3.0 |
inflection | 1.3.5 |
IlluminaHumanMethylation27kmanifest | 0.4.0 |
hgu133plus2.db | 3.2.3 |
gplots | 3.0.1.1 |
formatR | 1.7 |
evaluate | 0.14 |
ellipsis | 0.3.0 |
dplyr | 0.8.3 |
cometExactTest | 0.1.5 |
combinat | 0.0-8 |
cmm | 0.12 |
amap | 0.8-18 |
methods | 3.6.1 |
WGCNA | 1.68 |
useful | 1.2.6 |
trimcluster | 0.1-2.1 |
survey | 3.36 |
superpc | 1.09 |
startupmsg | 0.9.6 |
SQUAREM | 2017.10-1 |
spelling | 2.1 |
shinycssloaders | 0.2.0 |
seqbias | 1.34.0 |
rms | 5.1-4 |
reticulate | 1.13 |
plotrix | 3.7-7 |
phia | 0.2-1 |
ParamHelpers | 1.13 |
NeatMap | 0.3.6.2 |
MVA | 1.0-6 |
LaplacesDemon | 16.1.1 |
Homo.sapiens | 1.3.1 |
HKprocess | 0.0-2 |
hapmapsnp6 | 1.28.0 |
gridExtra | 2.3 |
GPfit | 1.0-8 |
geeM | 0.10.1 |
FField | 0.1.0 |
dndscv | 0.0.1.0 |
crosstalk | 1.0.0 |
affy | 1.64.0 |
affxparser | 1.58.0 |
weights | 1.0 |
tseries | 0.10-47 |
TFisher | 0.2.0 |
tensorflow | 2.0.0 |
tensor | 1.5 |
splus2R | 1.2-2 |
SIS | 0.8-7 |
Repitools | 1.32.0 |
R2HTML | 2.3.2 |
prodlim | 2019.11.13 |
pgf | 0.0.0.9000 |
neldermead | 1.0-11 |
MutationalPatterns | 1.12.0 |
matlab | 1.0.2 |
JM | 1.4-8 |
IRanges | 2.20.1 |
hgu95av2probe | 2.18.0 |
ggplotify | 0.0.4 |
geneLenDataBase | 1.22.0 |
ffbase | 0.12.7 |
fastICA | 1.2-2 |
entropy | 1.2.1 |
dataview | 2.1.1 |
compute.es | 0.2-4 |
coda | 0.19-3 |
bigmemory | 4.5.33 |
Affymoe4302Expr | 1.24.0 |
tfruns | 1.4 |
sourcetools | 0.1.7 |
rstudioapi | 0.10 |
RiboProfiling | 1.16.0 |
rgeos | 0.5-2 |
pkgconfig | 2.0.3 |
PFAM.db | 3.10.0 |
pedgene | 3.2 |
nor1mix | 1.3-0 |
muStat | 1.7.0 |
motifRG | 1.30.0 |
JASPAR2016 | 1.14.0 |
iCNV | 1.6.0 |
htmltools | 0.4.0 |
globals | 0.12.5 |
ggExtra | 0.9 |
ff | 2.2-14 |
EBImage | 4.28.1 |
ddalpha | 1.3.10 |
ctc | 1.60.0 |
clusterGeneration | 1.3.4 |
AnnotationHub | 2.18.0 |
abind | 1.4-5 |
rpart | 4.1-15 |
umap | 0.2.4.0 |
svUnit | 0.7-12 |
snp.plotter | 0.5.1 |
R.filesets | 2.13.0 |
pca3d | 0.10 |
Nozzle.R1 | 1.1-1 |
mvtnorm | 1.0-11 |
mixOmics | 6.10.6 |
misc3d | 0.8-4 |
metap | 1.2 |
IlluminaHumanMethylationEPICanno.ilm10b4.hg19 | 0.6.0 |
hwriter | 1.3.2 |
googleVis | 0.6.4 |
gmm | 1.6-4 |
Glimma | 1.14.0 |
future | 1.15.1 |
EnsDb.Hsapiens.v86 | 2.99.0 |
DiagrammeR | 1.0.1 |
ddCt | 1.42.0 |
convert | 1.62.0 |
bc3net | 1.0.4 |
lattice | 0.20-38 |
XLConnect | 0.2-15 |
WikipediR | 1.5.0 |
tkrplot | 0.0-24 |
sesameData | 1.4.0 |
seqminer | 7.1 |
seqMeta | 1.6.7 |
Rtsne | 0.15 |
RSpectra | 0.16-0 |
RGalaxy | 1.30.0 |
RColorBrewer | 1.1-2 |
pso | 1.0.3 |
minqa | 1.2.4 |
maxLik | 1.3-6 |
logisticPCA | 0.2 |
htmlwidgets | 1.5.1 |
hgu133a2.db | 3.2.3 |
HDF5Array | 1.14.1 |
ggridges | 0.5.1 |
gcrma | 2.58.0 |
FD | 1.0-12 |
eqtl | 1.1-7 |
epiDisplay | 3.5.0.1 |
bumphunter | 1.28.0 |
BSgenome | 1.54.0 |
compiler | 3.6.1 |
TxDb.Hsapiens.UCSC.hg38.knownGene | 3.10.0 |
timeDate | 3043.102 |
statnet | 2019.6 |
stargazer | 5.2.2 |
sjmisc | 2.8.2 |
shape | 1.4.4 |
RVtests | 1.2 |
R.utils | 2.9.2 |
rda | 1.0.2-2.1 |
popgraph | 1.5.1 |
lhs | 1.0.1 |
httpcode | 0.2.0 |
gridBase | 0.4-7 |
GOSim | 1.24.0 |
getPass | 0.2-2 |
genomeIntervals | 1.42.0 |
furrr | 0.1.0 |
Ecfun | 0.2-0 |
Ecdat | 0.3-4 |
dotCall64 | 1.0-0 |
bookdown | 0.16 |
beanplot | 1.2 |
backports | 1.1.5 |
affyPLM | 1.62.0 |
foreign | 0.8-72 |
tcltk2 | 1.2-11 |
Rsubread | 2.0.0 |
roxygen2 | 7.0.2 |
robCompositions | 2.1.0 |
rgexf | 0.15.3 |
rgenoud | 5.8-3.0 |
polyclip | 1.10-0 |
NMOF | 2.0-1 |
magick | 2.2 |
ltsa | 1.4.6 |
limma | 3.42.0 |
InteractionSet | 1.14.0 |
Icens | 1.58.0 |
hu6800cdf | 2.18.0 |
hierfstat | 0.04-22 |
hgu133a.db | 3.2.3 |
hgu133a2probe | 2.18.0 |
gower | 0.2.1 |
GenomeGraphs | 1.46.0 |
GENEAread | 2.0.8 |
flexclust | 1.4-0 |
estimability | 1.3 |
digest | 0.6.23 |
BiocParallel | 1.20.0 |
affyQCReport | 1.64.0 |
WES.1KG.WUGSC | 1.18.0 |
usethis | 1.5.1 |
TxDb.Mmusculus.UCSC.mm10.knownGene | 3.10.0 |
sp | 1.3-2 |
SingleCellExperiment | 1.8.0 |
shiny | 1.4.0 |
Rgraphviz | 2.30.0 |
RefFreeEWAS | 2.2 |
R2jags | 0.5-7 |
quadprog | 1.5-8 |
phylobase | 0.8.6 |
pbdBASE | 0.5-0 |
ncvreg | 3.11-1 |
mixmeta | 1.0.7 |
microbenchmark | 1.4-7 |
MAVE | 1.3.10 |
lsei | 1.2-0 |
graphlayouts | 0.5.0 |
GEOquery | 2.54.1 |
gdsfmt | 1.22.0 |
fitdistrplus | 1.0-14 |
d3heatmap | 0.6.1.2 |
clValid | 0.6-6 |
ChAMPdata | 2.18.0 |
cgdsr | 1.3.0 |
argparser | 0.4 |
adegenet | 2.1.1 |
webshot | 0.5.2 |
threg | 1.0.3 |
survivalROC | 1.0.3 |
scatterplot3d | 0.3-41 |
RgoogleMaps | 1.4.5 |
rBiopaxParser | 2.26.0 |
promises | 1.1.0 |
prettydoc | 0.3.1 |
poilog | 0.4 |
plsVarSel | 0.9.4 |
pkgmaker | 0.27 |
pkgDepTools | 1.52.0 |
pd.mogene.2.0.st | 3.14.1 |
pbapply | 1.4-2 |
ModelMetrics | 1.2.2 |
llogistic | 1.0.3 |
knitr | 1.26 |
jpeg | 0.1-8.1 |
humanomni5quadv1bCrlmm | 1.0.0 |
gridSVG | 1.7-1 |
FNN | 1.1.3 |
exactRankTests | 0.8-31 |
ellipse | 0.4.1 |
doSNOW | 1.0.18 |
clusterCrit | 1.2.8 |
changepoint | 2.2.2 |
carData | 3.0-3 |
biovizBase | 1.34.1 |
xml2 | 1.2.2 |
tximport | 1.14.0 |
topGO | 2.37.0 |
timereg | 1.9.4 |
texreg | 1.36.23 |
stringr | 1.4.0 |
squash | 1.0.8 |
Runuran | 0.27 |
phangorn | 2.5.5 |
pbdPROF | 0.4-0 |
OmicCircos | 1.24.0 |
NbClust | 3.0 |
ICC | 2.3.0 |
fBasics | 3042.89 |
extrafontdb | 1.0 |
BSgenome.Ecoli.NCBI.20080805 | 1.3.1000 |
xgboost | 0.90.0.2 |
viridis | 0.5.1 |
VIM | 4.8.0 |
tuneR | 1.3.3 |
tibble | 2.1.3 |
stepPlr | 0.93 |
RNeXML | 2.4.0 |
Rglpk | 0.6-4 |
pillar | 1.4.2 |
penalized | 0.9-51 |
parmigene | 1.0.2 |
packrat | 0.5.0 |
munsell | 0.5.0 |
MKmisc | 1.6 |
insight | 0.7.1 |
hms | 0.5.2 |
hgu95av2cdf | 2.18.0 |
gProfileR | 0.7.0 |
gnm | 1.1-0 |
gap | 1.2.1 |
fftwtools | 0.9-8 |
facets | 0.6.1 |
etm | 1.0.5 |
energy | 1.7-7 |
dgof | 1.2 |
cvTools | 0.3.2 |
coxme | 2.2-14 |
Cairo | 1.5-10 |
BSgenome.Cfamiliaris.UCSC.canFam2 | 1.4.0 |
bkmr | 0.2.0 |
bindrcpp | 0.2.2 |
ASCAT | 2.5.2 |
aroma.light | 3.16.0 |
ActiveDriver | 1.0.0 |
XVector | 0.26.0 |
units | 0.6-5 |
SeqGSEA | 1.26.0 |
samr | 3.0 |
R.huge | 0.9.0 |
registry | 0.5-1 |
recipes | 0.1.7 |
Rcpp | 1.0.3 |
png | 0.1-7 |
missMethyl | 1.20.0 |
MatrixModels | 0.4-1 |
intansv | 1.26.0 |
ICSNP | 1.1-1 |
gsmoothr | 0.1.7 |
fastmatch | 1.1-0 |
extrafont | 0.17 |
base64 | 2.0 |
ARTP2 | 0.9.45 |
aroma.apd | 0.6.0 |
aroma.affymetrix | 3.2.0 |
aCGH | 1.64.0 |
worrms | 0.4.0 |
venneuler | 1.1-0 |
VanillaICE | 1.48.0 |
ucminf | 1.1-4 |
triebeard | 0.3.0 |
svglite | 1.2.2 |
subselect | 0.14 |
SNPRelate | 1.20.1 |
SingleR | 1.0.0 |
ShortRead | 1.44.0 |
Rsolnp | 1.16 |
reshape | 0.8.8 |
profileModel | 0.6.0 |
phytools | 0.6-99 |
mzID | 1.24.0 |
mixdist | 0.5-5 |
miscF | 0.1-4 |
mi | 1.0 |
mboost | 2.9-1 |
km.ci | 0.5-2 |
isobar | 1.32.0 |
highr | 0.8 |
genomewidesnp6Crlmm | 1.0.7 |
generics | 0.0.2 |
float | 0.2-3 |
filehash | 2.4-2 |
ergm.count | 3.4.0 |
EpiDynamics | 0.3.0 |
enrichplot | 1.6.0 |
Deducer | 0.7-9 |
CVST | 0.2-2 |
cleaver | 1.24.0 |
bnclassify | 0.4.3 |
arm | 1.10-1 |
nnet | 7.3-12 |
mgcv | 1.8-31 |
systemfonts | 0.1.1 |
stringdist | 0.9.5.5 |
setRNG | 2013.9-1 |
sendmailR | 1.2-1 |
riboSeqR | 1.20.0 |
rappdirs | 0.3.1 |
plot3Drgl | 1.0.1 |
pepr | 0.2.1 |
multcomp | 1.4-11 |
mlbench | 2.1-1 |
gridGraphics | 0.4-1 |
ggforce | 0.3.1 |
FlowSorted.Blood.450k | 1.24.0 |
findpython | 1.0.5 |
fields | 10.0 |
dtw | 1.21-3 |
broom | 0.5.2 |
aws | 2.3-0 |
annotatr | 1.12.1 |
Packages installed in the user's home directory
You can install your own packages in your home directory. On our systems, the
default path to the library is ~/R/<ver>/library
where
ver is the two digit version of the R in use (e.g. 3.5).
Note that R will not automatically create this directory - it needs to be created manually
before trying to install R packages..
Here is an example using the pacman package for easier package management:
[user@cn3144 ~]$ R R version 3.5.0 (2018-04-23) -- "Joy in Playing" Copyright (C) 2018 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) > library(pacman) > p_isinstalled(rapport) [1] FALSE > p_install(rapport) Installing package into ‘/usr/local/apps/R/3.5/site-library’ (as ‘lib’ is unspecified) Warning in utils::install.packages(package, ...) : 'lib = "/usr/local/apps/R/3.5/site-library"' is not writable Would you like to use a personal library instead? (yes/No/cancel) yes Would you like to create a personal library ‘~/R/3.5/library’ to install packages into? (yes/No/cancel) yes also installing the dependency ‘rapportools’ [...snip...] rapport installed >
Per project package management
An alternative approach to relying on packages installed centrally or in your home directory is to create isolated, per project, package sets. Snapshots of these package sets can be shared. This increases reproducibility at the cost of increased storage and potential package installation headaches. The packrat package implements this approach. See the packrat walkthrough for a basic introduction.
R batch jobs are similar to any other batch job. A batch script ('rjob.sh') is created that sets up the environment and runs the R code:
#!/bin/bash module load R/3.5 R --vanilla < /data/user/Rtests/Rtest.r > /data/user/Rtests/Rtest.out
or use Rscript
instead
#!/bin/bash module load R/3.5 Rscript /data/user/Rtests/Rtest.r > /data/user/Rtests/Rtest.out
Submit this job using the Slurm sbatch command.
sbatch [--cpus-per-task=#] [--mem=#] rjob.sh
Command line arguments for R scripts
R scripts can be written to accept command line arguments. The simplest
way of doing this is with the commandArgs()
function. For
example the script 'simple_args.R'
args <- commandArgs(trailingOnly=TRUE) i <- 0 for (arg in args) { i <- i + 1 cat(sprintf("arg %02i: '%s'\n", i, arg)) }
can be called like this
[user@cn3144]$ module load R [user@cn3144]$ Rscript simple.R this is a test arg 01: 'this' arg 02: 'is' arg 03: 'a' arg 04: 'test' [user@cn3144]$ Rscript simple.R 'this is a test' arg 01: 'this is a test' [user@cn3144]$ R --vanilla --slave --args 'this is a test' < simple.R arg 01: 'this is a test'
Alternatively, commandline arguments can be parsed using the getopt package. For example:
library(getopt) ### ### Describe the expected command line arguments ### # mask: 0=no argument # 1=required argument # 2=optional argument spec <- matrix(c( # long name short name mask type description(optional) # --------- ---------- ---- ------------ --------------------- 'file' , 'f', 1, 'character', 'input file', 'verbose', 'v', 0, 'logical', 'verbose output', 'help' , 'h', 0, 'logical', 'show this help message' ), byrow=TRUE, ncol=5); # parse the command line opt <- getopt(spec); # show help if requested if (!is.null(opt$help)) { cat(getopt(spec, usage=TRUE)); q(); } # set defaults if ( is.null(opt$file) ) { opt$file = 'testfile' } if ( is.null(opt$verbose) ) { opt$verbose = FALSE } print(opt)
This script an be used as follows
[user@cn3144]$ Rscript getopt_example.R --file some.txt --verbose $ARGS character(0) $file [1] "some.txt" $verbose [1] TRUE [user@cn3144]$ Rscript getopt_example.R --file some.txt $ARGS character(0) $file [1] "some.txt" $verbose [1] FALSE [user@cn3144]$ Rscript getopt_example.R --help Usage: getopt_example.R [-[-file|f]] [-[-verbose|v]] [-[-help|h]] -f|--file input file -v|--verbose verbose output -h|--help show this help message
getopt does not have support for mixing flags and positional arguments. There are other packages with different features and approaches that can be used to design command line interfaces for R scripts.
A swarm of jobs is an easy way to submit a set of independent commands requiring identical resources.
Create a swarmfile (e.g. rjobs.swarm). For example:
Rscript /data/user/R/R1 > /data/user/R/R1.out Rscript /data/user/R/R2 > /data/user/R/R2.out Rscript /data/user/R/R3 > /data/user/R/R3.out
Submit this job using the swarm command.
swarm -f TEMPLATE.swarm [-g #] [-t #] --module R/3.5where
-g # | Number of Gigabytes of memory required for each process (1 line in the swarm command file) |
-t # | Number of threads/CPUs required for each process (1 line in the swarm command file). |
--module TEMPLATE | Loads the TEMPLATE module for each subjob in the swarm |
Rswarm
is a utility to create a series of R input files from a
single R (master) template file with different output filenames and with unique
random number generator seeds. It will simultaneously create a swarm command
file that can be used to submit the swarm of R jobs. Rswarm was originally
developed by Lori Dodd and Trevor Reeve with modifications by the Biowulf
staff.
Say, for example, that the goal of a simulation study is to evaluate properties of the t-test. The function "sim.fun" in file "sim.R" below repeatedly generates random normal data with a given mean, performs a one sample t-test (i.e. testing if the mean is different from 0), and records the p-values.
####################################### # n.samp: size of samples generated for each simulation # mu: mean # sd: standard deviation # nsim: the number of simulations # output1: output table # seed: the seed for set.seed ####################################### sim.fun <- function(n.samp=100, mu=0, sd=1, n.sim, output1, seed){ set.seed(seed) p.values <- c() for (i in 1:n.sim){ x <- rnorm(n.samp, mean=mu, sd=sd) p.values <- c(p.values, t.test(x)$p.value) } saveRDS(p.values, file=output1) }
To use Rswarm, create a wrapper script similar to the following ("rfile.R")
source("sim.R") sim.fun(n.sim=DUMX, output1="DUMY1",seed=DUMZ)
using the the dummy variables which will be replaced by Rswarm.
Dummy variable | Replaced with |
---|---|
DUMX | Number of simulations to be specified in each replicate file |
DUMY1 | Output file 1 |
DUMY2 | Output file 2 (optional) |
DUMZ | Random seed |
To swarm this code, we need replicates of the rfile.R file, each with a different seed and different output file. The Rswarm utility will create the specified number of replicates, supply each with a different seed (from an external file containing seed numbers), and create unique output files for each replicate. Note, that we allow for you to specify the number of simulations within each file, in addition to specifying the number of replicates.
For example, the following Rswarm command at the Biowulf prompt will create 2 replicate files, each specifying 50 simulations, a different seed from a file entitled, "seedfile.txt," and unique output files.
[user@biowulf]$ ls -lh total 8.0K -rw-r--r-- 1 user group 63 Apr 25 12:34 rfile.R -rw-r--r-- 1 user group 564 Apr 25 12:15 seedfile.txt -rw-r--r-- 1 user group 547 Apr 25 12:04 sim.R [user@biowulf]$ head -n2 seedfile.txt 24963 27507 [user@biowulf]$ Rswarm --rfile=rfile.R --sfile=seedfile.txt --path=. \ --reps=2 --sims=50 --start=0 --ext1=.rds The template file is rfile.R The seed file is seedfile.txt The path is . The number of replicates desired is 2 The number of sims per file is 50 The starting file number is 0+1 The extension for output files 1 is .rds The extension for output files 2 is .std.txt Is this correct (y or n)? : y Creating file number 1: ./rfile1.R with output ./rfile1.rds ./rfile1.std.txt and seed 24963 Creating file number 2: ./rfile2.R with output ./rfile2.rds ./rfile2.std.txt and seed 27507 [user@biowulf]$ ls -lh total 16K -rw-r--r-- 1 user group 69 Apr 25 12:39 rfile1.R -rw-r--r-- 1 user group 69 Apr 25 12:39 rfile2.R -rw-r--r-- 1 user group 63 Apr 25 12:34 rfile.R -rw-r--r-- 1 user group 50 Apr 25 12:39 rfile.sw -rw-r--r-- 1 user group 564 Apr 25 12:15 seedfile.txt -rw-r--r-- 1 user group 547 Apr 25 12:04 sim.R [user@biowulf]$ cat rfile1.R source("sim.R") sim.fun(n.sim=50, output1="./rfile1.rds",seed=24963) [user@biowulf]$ cat rfile2.R source("sim.R") sim.fun(n.sim=50, output1="./rfile2.rds",seed=27507) [user@biowulf]$ cat rfile.sw R --vanilla < ./rfile1.R R --vanilla < ./rfile2.R [user@biowulf]$ swarm -f rfile.sw --time=10 --partition=quick --module R 199110 [user@biowulf]$ ls -lh *.rds -rw-r--r-- 1 user group 445 Apr 25 12:52 rfile1.rds -rw-r--r-- 1 user group 445 Apr 25 12:52 rfile2.rds
Full Rswarm usage:
Usage: Rswarm [options] --rfile=[file] (required) R program requiring replication --sfile=[file] (required) file with generated seeds, one per line --path=[path] (required) directory for output of all files --reps=[i] (required) number of replicates desired --sims=[i] (required) number of sims per file --start=[i] (required) starting file number --ext1=[string] (optional) file extension for output file 1 --ext2=[string] (optional) file extension for output file 2` --help, -h print this help text
Note that R scripts can be written to take a random seed as a command line argument
or derive it from the environment variable SLURM_ARRAY_TASK_ID
to achieve
an equivalent result.
The R parallel package provides functions for parallel execution of R code on machines with multiple CPUs. Unlike other parallel processing methods, all jobs share the full state of R when spawned, so no data or code needs to be initialized if it was loaded before starting worker processes. The actual spawning is very fast as well since no new R instance needs to be started.
Parallel includes the dectectCores
function which is often used
to automatically detect the number of available CPUs. However, it always
reports all CPUs available on a node irrespective of how many CPUs
were allocated to the job. Therefore batch jobs should use the following
function to automatically detect the number of allocated CPUs:
detectBatchCPUs <- function() { ncores <- as.integer(Sys.getenv("SLURM_CPUS_PER_TASK")) if (is.na(ncores)) { ncores <- as.integer(Sys.getenv("SLURM_JOB_CPUS_PER_NODE")) } if (is.na(ncores)) { return(4) # for helix } return(ncores) }Or, alternatively, use the
alvailableCores()
function from the future
package:
future::availableCores()
Note that future::availableCores()
only works properly if
SLURM_CPUS_PER_TASK is set (i.e. when using swarm or passing the --cpus-per-task/-c
options to sbatch or sinteractive).
The number of detected cores can then be used as usual
ncpus <- detectBatchCPUs() # or ncpus <- future::availableCores() options(mc.cores = ncpus) mclapply(..., mc.cores = ncpus) makeCluster(ncpus)
Batch R jobs using detectBatchCPUs
can then be submitted
with sbatch --cpus-per-core=X
or swarm -t X
and will
behave properly.
Alternatively, if your code can make use of all CPUs on a node
efficiently, you could allocate nodes exclusively ( sbatch
--exclusive
or swarm -t auto
) and use the built-in
detectCores
function.
The state of the random number generator in each worker process has
to be carefully considered for any parallel workloads. See the help for
mcparallel
and the paralle package documentation for
more details.
A very convenient way to do parallel computations is provided by the foreach package. Here is a simple example (copied from this blog post)
> library(foreach) > library(doParallel) > library(doMC) > registerDoMC(cores=future::availableCores()) > max.eig <- function(N, sigma) { + d <- matrix(rnorm(N**2, sd = sigma), nrow = N) + # + E <- eigen(d)$values + # + abs(E)[[1]] + } > library(rbenchmark) > benchmark( + foreach(n = 1:100) %do% max.eig(n, 1), + foreach(n = 1:100) %dopar% max.eig(n, 1) + ) test replications elapsed relative 1 foreach(n = 1:100) %do% max.eig(n, 1) 100 32.696 3.243 2 foreach(n = 1:100) %dopar% max.eig(n, 1) 100 10.083 1.000 user.self sys.self user.child sys.child 1 32.632 0.059 0.000 0.00 2 3.037 3.389 43.417 10.73 >
Note that with 12 CPUs we got a speedup of only 3.2 relative to sequential. This is a cautionary note to carefully test scaling of parallel code.
The R
BiocParallel provides modified versions and novel implementation of
functions for parallel evaluation, tailored to use with Bioconductor objects. Like
the parallel package, it is not aware of slurm allocations and will therefore,
by default, try to use parallel::detectCores() - 2
CPUs, which is
all but 2 CPUs installed on a compute node irrespective of how many CPUs have
been allocated to a job. That will lead to overloaded jobs and very inefficient
code. You can verify this by checking on the registered backends after allocating
an interactive session with 2 CPUs:
> library(BiocParallel) > registered() $MulticoreParam class: MulticoreParam bpisup: FALSE; bpnworkers: 54; bptasks: 0; bpjobname: BPJOB bplog: FALSE; bpthreshold: INFO; bpstopOnError: TRUE bptimeout: 2592000; bpprogressbar: FALSE bpRNGseed: bplogdir: NA bpresultdir: NA cluster type: FORK [...snip...]
So the default backend (top of the registered stack) would use 54 workers on 2 CPUs. The default backend can be changed with
> options(MulticoreParam=quote(MulticoreParam(workers=future::availableCores()))) > registered() $MulticoreParam class: MulticoreParam bpisup: FALSE; bpnworkers: 2; bptasks: 0; bpjobname: BPJOB bplog: FALSE; bpthreshold: INFO; bpstopOnError: TRUE [...snip..]
or
> register(MulticoreParam(workers = future::availableCores(), default=TRUE))
Alternatively, a param object can be passed to BiocParallel functions.
R can do implicit multithreading when using a subset of optimized functions in the library or functions that take advantage of parallelized routines in the lower level math libraries.
The function crossprod(m)
which is equivalent to calculating
t(m) %*% m
, for example, makes use of implicit parallelism in the
underlying math libraries and can benefit from using more than one thread. The number
of threads used by such functions is regulated by the environment variable
OMP_NUM_THREADS
, which the R module sets automatically when
loaded as part of a batch or interactive job. Here is the runtime of
this function with different values for OMP_NUM_THREADS
:

The code used for this benchmark was
# this file is benchmark2.R runs <- 3 o <- 2^13 b <- 0 for (i in 1:runs) { a <- matrix(rnorm(o*o), o, o) invisible(gc()) timing <- system.time({ b <- crossprod(a) # equivalent to: b <- t(a) %*% a })[3] cat(sprintf("%f\n", timing)) }
And was called with
node$ module load R/3.5 node$ OMP_NUM_THREADS=1 Rscript benchmark2.R node$ OMP_NUM_THREADS=2 Rscript benchmark2.R ... node$ OMP_NUM_THREADS=32 Rscript benchmark2.R
From within a job that had been allocated 32 CPUs.
Notes:
- The R module sets
OMP_NUM_THREADS
to 1. This is done to avoid problems when also using explicit parallelism that uses forked worker processes like for example the 'parallel' package. In that case each worker may startOMP_NUM_THREADS
threads so there could be as many asncpus * OMP_NUM_THREADS
total threads. If ncpus is set to the number of allocated CPUs, as would be the most common case, that would lead to a huge overload of the job and could potentially fail if the ulimit on the number of processes is exceeded. - Increasing
OMP_NUM_THREADS
and allocating more CPUs may or may not increase performance of your code. Before running jobs with more CPUs it is vital to benchmark single jobs and prove that your code can benefit from implicit parallelism. Otherwise resources will be wasted. - Benchmarking is also important to measure efficiency of parallelism. Clearly, in this example, running with more than 8 threads would be highly inefficient.
There appears to also be another level of parallelism within the R libraries.
One function that takes advantage of this is the dist
function.
The level of parallelism allowed with this mechanism seems to be set with
two internal R functions (setMaxNumMathThreads
and setNumMathThreads
).
Note that this is a distinct mechanism - i.e. setting OMP_NUM_THREADS has
no impact on dist
and setMaxNumMathThreads
has no impact on the performance of crossprod
. Here is the performance
of dist
with different numbers of threads:

The timings for this example were created with
# this file is benchmark1.R rt <- data.frame() o <- 2^12 m <- matrix(rnorm(o*o), o, o) for (nt in c(1, 2, 4, 8, 16, 32)) { .Internal(setMaxNumMathThreads(nt)) .Internal(setNumMathThreads(nt)) res <- system.time(d <- dist(m)) rt <- rbind(rt, c(nt, o, res[3])) } colnames(rt) <- c("threads", "order", "elapsed") write.csv(rt, file="benchmark1.csv", row.names=F)
This was run within an allocation with 32 CPUs with
node$ OMP_NUM_THREADS=1 Rscript benchmark1.R
The same notes about benchmarking as above apply. Also note that there is very little documentation about this to be found online.
Our R installations include the Rmpi and
pbdMPI interfaces to MPI (OpenMPI in our case). R/MPI code
can be run as batch jobs or from an sinteractive session with mpiexec
or srun --mpi=pmix
.
Running MPI code from an interactive R session is not supported.
The higher level snow MPI cluster interface is currently not supported. However, the doMPI parallel backend for foreach is supported.
Example Rmpi code
# this script is test1.r library(Rmpi) id <- mpi.comm.rank(comm=0) np <- mpi.comm.size (comm=0) hostname <- mpi.get.processor.name() msg <- sprintf ("Hello world from task %03d of %03d, on host %s \n", id , np , hostname) cat(msg) invisible(mpi.barrier(comm=0)) invisible(mpi.finalize())
This script can be run from an sinteractive session which is useful for debugging
[user@biowulf]$ sinteractive --ntasks=4 --nodes=4 salloc.exe: Pending job allocation 19945094 salloc.exe: job 19945094 queued and waiting for resources salloc.exe: job 19945094 has been allocated resources salloc.exe: Granted job allocation 19945094 salloc.exe: Waiting for resource configuration salloc.exe: Nodes cn[4101-4104] are ready for job srun: error: x11: no local DISPLAY defined, skipping [user@cn4101 ~]$ module load R [user@cn4101 ~]$ mpiexec Rscript test1.r Hello world from task 000 of 004, on host cn4101 Hello world from task 001 of 004, on host cn4102 Hello world from task 002 of 004, on host cn4103 Hello world from task 003 of 004, on host cn4104
More commonly an mpi script would be run as a batch job using a batch script like the following
#! /bin/bash # this script is test1.sh module load R/3.5 || exit 1 mpiexec Rscript test1.r ## or # srun --mpi=pmix Rscript test1.r
which would be submitted with
[user@biowulf]$ sbatch --ntasks=8 --nodes=2 --partition=multinode test1.sh
Here is a Rmpi example with actual collective communication though still very simplistic. This script derives an estimate for π in each task, gathers the results in task 0 and repeats this process n times to arrive at a final estimate:
# this is test2.r library(Rmpi) # return a random number from /dev/urandom readRandom <- function() { dev <- "/dev/urandom" rng = file(dev,"rb", raw=TRUE) n = readBin(rng, what="integer", 1) # read some 8-byte integers close(rng) return( n[1] ) # reduce range and shift } pi_dart <- function(i) { est <- mean(sqrt(runif(throws)^2 + runif(throws)^2) <= 1) * 4 return(est) } id <- mpi.comm.rank(comm=0) np <- mpi.comm.size (comm=0) hostname <- mpi.get.processor.name() rngseed <- readRandom() cat(sprintf("This is task %03d of %03d, on host %s with seed %i\n", id , np , hostname, rngseed)) set.seed(rngseed) throws <- 1e7 rounds <- 400 pi_global_sum = 0.0 for (i in 1:rounds) { # each task comes up with its own estimate of pi pi_est <- mean(sqrt(runif(throws)^2 + runif(throws)^2) <= 1) * 4 # then we gather them all in task 0; type=2 means that the values are doubles pi_task_sum <- mpi.reduce(pi_est, type=2, op="sum", dest=0, comm=0) if (id == 0) { # task with id 0 then uses the sum to calculate an avarage across the # tasks and adds that to the global sum pi_global_sum <- pi_global_sum + (pi_task_sum / np) } } # when we're done, the task id 0 averages across all the rounds and prints the result if (id == 0) { cat(sprintf("Real value of pi = %.10f\n", pi)) cat(sprintf(" Estimate of pi = %.10f\n", pi_global_sum / rounds)) } invisible(mpi.finalize())
Running this script in our sinteractive session from above:
[user@cn4101 ~]$ mpiexec Rscript test2.r This is task 000 of 004, on host cn4101 with seed -303950071 This is task 001 of 004, on host cn4102 with seed -1074523673 This is task 002 of 004, on host cn4103 with seed 788983269 This is task 003 of 004, on host cn4104 with seed -922785662 Real value of pi = 3.1415926536 Estimate of pi = 3.1415935438
doMPI example code
doMPI provides an MPI backend for the foreach package. Here is a simple hello-world-ish doMPI example:
# this it test3.r suppressMessages({ library(doMPI) library(foreach) }) cl <- doMPI::startMPIcluster() registerDoMPI(cl) x <- foreach(i=1:6, .combine="c") %dopar% { sqrt(i) } print(x) x <- foreach(i=1:3, .combine="cbind") %dopar% { set.seed(i) rnorm(3) } print(x) closeCluster(cl) mpi.quit()
This code can be run with
[user@cn4101 ~]$ mpiexec Rscript test3.r [1] 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 result.1 result.2 result.3 [1,] -0.6264538 -0.8969145 -0.9619334 [2,] 0.1836433 0.1848492 -0.2925257 [3,] -0.8356286 1.5878453 0.2587882
Do not specify the number of tasks to run. doMPI clusters will hang during shutdown
if doMPI has to spawn worker processes. Instead, let mpiexec
start the processes and then
doMPI will wire up a master and slaves from the existing processes. Note that the
startMPIcluster
function has to be called early in the script for that reason.
h2o
h2o is a machine learning package written in java. The R interface starts a java h2o instance
with a given number of threads and then connects to it through http. This fails on compute nodes
if the http proxy variables are set. Therefore it is necessary to unset http_proxy
before using h2o:
[user@biowulf]$ sinteractive --cpus-per-task=4 --mem=20g salloc.exe: Pending job allocation 46116226 salloc.exe: job 46116226 queued and waiting for resources salloc.exe: job 46116226 has been allocated resources salloc.exe: Granted job allocation 46116226 salloc.exe: Waiting for resource configuration salloc.exe: Nodes cn3144 are ready for job [user@cn3144 ~]$ module load R/3.5 [user@cn3144 ~]$ unset http_proxy [user@cn3144 ~]$ R R version 3.5.0 (2018-04-23) -- "Joy in Playing" Copyright (C) 2018 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) [...snip...] > library(h2o) > h2o.init(ip='localhost', nthreads=future::availableCores(), max_mem_size='12g') H2O is not running yet, starting it now... Note: In case of errors look at the following log files: /tmp/RtmpVdW92Y/h2o_wresch_started_from_r.out /tmp/RtmpVdW92Y/h2o_wresch_started_from_r.err openjdk version "1.8.0_161" OpenJDK Runtime Environment (build 1.8.0_161-b14) OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode) Starting H2O JVM and connecting: . Connection successful! R is connected to the H2O cluster: H2O cluster uptime: 2 seconds 145 milliseconds H2O cluster timezone: America/New_York H2O data parsing timezone: UTC H2O cluster version: 3.20.0.2 H2O cluster version age: 2 months and 12 days H2O cluster name: H2O_started_from_R_wresch_ser222 H2O cluster total nodes: 1 H2O cluster total memory: 10.67 GB H2O cluster total cores: 4 H2O cluster allowed cores: 4 H2O cluster healthy: TRUE H2O Connection ip: localhost H2O Connection port: 54321 H2O Connection proxy: NA H2O Internal Security: FALSE H2O API Extensions: XGBoost, Algos, AutoML, Core V3, Core V4 R Version: R version 3.5.0 (2018-04-23) >
- The R Homepage
- PDF manuals including an Introduction to R.
- The R FAQ
- 'parallel' documentation
- Rmpi documentation
- Snow user guide