Contributions
Contributions copied to clipboard
LimROTS
Update the following URL to point to the GitHub repository of the package you wish to submit to Bioconductor
- Repository: https://github.com/AliYoussef96/LimROTS
Confirm the following by editing each check box to '[x]'
-
[x] I understand that by submitting my package to Bioconductor, the package source and all review commentary are visible to the general public.
-
[x] I have read the Bioconductor Package Submission instructions. My package is consistent with the Bioconductor Package Guidelines.
-
[x] I understand Bioconductor Package Naming Policy and acknowledge Bioconductor may retain use of package name.
-
[x] I understand that a minimum requirement for package acceptance is to pass R CMD check and R CMD BiocCheck with no ERROR or WARNINGS. Passing these checks does not result in automatic acceptance. The package will then undergo a formal review and recommendations for acceptance regarding other Bioconductor standards will be addressed.
-
[x] My package addresses statistical or bioinformatic issues related to the analysis and comprehension of high throughput genomic data.
-
[x] I am committed to the long-term maintenance of my package. This includes monitoring the support site for issues that users may have, subscribing to the bioc-devel mailing list to stay aware of developments in the Bioconductor community, responding promptly to requests for updates from the Core team in response to changes in R or underlying software.
-
[x] I am familiar with the Bioconductor code of conduct and agree to abide by it.
I am familiar with the essential aspects of Bioconductor software management, including:
- [x] The 'devel' branch for new packages and features.
- [x] The stable 'release' branch, made available every six months, for bug fixes.
- [x] Bioconductor version control using Git (optionally via GitHub).
For questions/help about the submission process, including questions about the output of the automatic reports generated by the SPB (Single Package Builder), please use the #package-submission channel of our Community Slack. Follow the link on the home page of the Bioconductor website to sign up.
Hi @AliYoussef96
Thanks for submitting your package. We are taking a quick look at it and you will hear back from us soon.
The DESCRIPTION file for this package is:
Package: LimROTS
Title: A Hybrid Method Integrating Empirical Bayes and
Reproducibility-Optimized Statistics for Robust Analysis of Proteomics
and Metabolomics Data
Version: 0.99.0
Authors@R:
c(person(given = "Ali", family = "Mostafa Anwar", role = c("aut", "cre"),
email= "[email protected]",
comment = c(ORCID = "0000-0002-5201-387X")),
person(given = "Leo", family = "Lahti", role = c("aut" ,"ths"),
email = "[email protected]",
comment = c(ORCID = "0000-0001-5537-637X")),
person(given = "Akewak", family = "Jeba", role = c("aut","ctb"),
email = "[email protected]",
comment = c(ORCID = "0009-0007-1347-7552")),
person(given = "Eleanor", family = "Coffey", role = c("aut", "ths"),
email = "[email protected]",
comment = c(ORCID = "0000-0002-9717-5610")))
Description: Differential expression analysis is a prevalent method utilised in
the examination of diverse biological data. The
reproducibility-optimized test statistic (ROTS) modifies a
t-statistic based on the data's intrinsic characteristics and ranks
features according to their statistical significance for
differential expression between two or more groups (f-statistic).
Focussing on proteomics and metabolomics, the current ROTS
implementation cannot account for technical or biological
covariates such as MS batches or gender differences among
the samples. Consequently, we developed LimROTS, which employs a
reproducibility-optimized test statistic utilising the limma
methodology to simulate complex experimental designs. LimROTS is a
hybrid method integrating empirical bayes and
reproducibility-optimized statistics for robust analysis
of proteomics and metabolomics data.
License: Artistic-2.0
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.2
Depends: R (>= 4.4.0)
biocViews: Software, GeneExpression, DifferentialExpression,
Microarray, RNASeq, Proteomics, ImmunoOncology, Metabolomics, mRNAMicroarray
URL: https://github.com/AliYoussef96/LimROTS, https://aliyoussef96.github.io/LimROTS/
BugReports: https://github.com/AliYoussef96/LimROTS/issues
VignetteBuilder:
knitr
Imports:
limma,
parallel,
foreach,
doParallel,
stringr,
qvalue,
SummarizedExperiment,
utils,
stats,
doRNG,
dplyr
Suggests:
BiocStyle,
ggplot2,
magick,
testthat (>= 3.0.0),
knitr,
rmarkdown,
ROTS
Config/testthat/edition: 3
Your package has been added to git.bioconductor.org to continue the pre-review process. A build report will be posted shortly. Please fix any ERROR and WARNING in the build report before a reviewer is assigned or provide a justification on why you feel the ERROR or WARNING should be granted an exception.
IMPORTANT: Please read this documentation for setting up remotes to push to git.bioconductor.org. All changes should be pushed to git.bioconductor.org moving forward. It is required to push a version bump to git.bioconductor.org to trigger a new build report.
Bioconductor utilized your github ssh-keys for git.bioconductor.org access. To manage keys and future access you may want to active your Bioconductor Git Credentials Account
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "ERROR". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.0.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: 5f452f84be106b3f2a172fc93b20b3d32a4f7662
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "ERROR". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.1.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: 802917af8adf8f59f33269738837d37939a2b642
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "ERROR". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.2.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: 91d89ad8c95f2cb5e224f5b8f584d6a4649ca9da
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "WARNINGS". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.3.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: 3df3344bb74eafacb20677e4728383b863c7f6f6
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
Congratulations! The package built without errors or warnings on all platforms.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.4.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
A reviewer has been assigned to your package for an indepth review. Please respond accordingly to any further comments from the reviewer.
Hi @AliYoussef96, sorry for the wait, I am now going through your package. I'll come back to you with a full review later today, but one thing I wonder whether you could wrap the object returned by theLimROTS() main function into a SummarizedExperiment object? You don't necessarily need to create a new class for your package if you don't want to, you could simply append the result data to the metadata or colData of the original SE object. I believe changes would be mostly transparent to the end-user (eg you can still access to limrots.results$BH.pvalue, but would maintain a data structure familiar to Bioc users.
Hi @js2264,
Thank you for taking the time to review the package! I appreciate your suggestion and think it’s a great idea. I’ll make the adjustment to wrap the object returned by the limROTS() function into a SummarizedExperiment object, later today.
Overall comments
The {LimROTS} package source code is in relatively good shape and the package is well documented. However, there are a few points that could be improved. As it is, SummarizedExperiment objects are used as input to the main function LimROTS(), but the results are returned as a list. Bioconductor end-users are used to working with SummarizedExperiment objects and endomorphic functions. Returning the results as an updated SummarizedExperiment object would greatly improve the user experience.
The package needs a few updates to be compliant with the Bioconductor guidelines, in particular to implement more formal tests and well as argument checks in the main function.
Currently, the main function LimROTS() will fail with non-very-helpful error messages if some arguments are not explicitely specified by the end-user.
My review is based on the current Bioconductor guidelines and reviewer checklist (https://contributions.bioconductor.org/docs/package-review-checklist.md).
The DESCRIPTION file
Refer to the DESCRIPTION section in the BioC package guideline for details on the individual points.
- [ ]
Depends,Imports,Suggests,Enhancesfields.
Bioconductor 3.21 (current devel) will work along R 4.5.0. Please update R version dependency from 4.4.0 to 4.5.0.
Also, I'd suggest moving SummarizedExperiment to the Depends: field, if you
do end up using it as a container for your results object.
The NAMESPACE file
- [ ] Function names use
camelCaseorsnake_caseand do not include..
bootstrapSamples.limRots() function has a . in the name. This . nomenclature suggests that you have defined a generig bootstrapSamples() function and then a method for a specific limRots class, however this is not the case. Consider renaming the function to remove the .. Also consider not exporting this function if not used by end-users (see below).
Other functions (eg calOverlaps.slr()) have a . in the name, but they are not
exported. Consider fixing it for consistency.
- [ ] Selective imports using
importFrominstead of import all withimport.
All functions from doRNG and utils packages are imported, which is not necessary.
In the case of doRNG, it is not a huge problem, as only few functions are exported by the package. However, in the case of utils, it is better to import only the necessary functions. Currently, end-users may end up with conflicts during their analysis if they run library(LimROTS) and it imports all functions from utils under the hood.
- [ ] Individual functions/methods are exported instead of all.
Why are bootstrapS(), bootstrapSamples.limRots() and calculateFalseDiscoveryRate() exported? Their documentation does not suggest that they are intended for end-users. If they are indeed meant to only be used internally, consider not export them.
The NEWS file
- [x] News file in correct location and format.
It's nice to have a NEWS file in the package, but it is not strictly mandatory. If you do have one, please make sure it is regularly updated!
Documentation
- [ ] Vignette present and does describe the core functionality of the package.
In the "Parameter Description for LimROTS" section, consider first mentioning that
the LimROTS() function is the main function provided to the end users in the {LimROTS} package.
Consider removing the list of all parameters in this section. If these parameters or their description evolves, it is likely that the vignette will become outdated. Instead, consider linking to the help page of the function, which will always be up-to-date.
- [ ] Vignette has an Introduction section. This should include motivation for inclusion to Bioconductor
Following Bioconductor's recommendation, consider adding a section that describes the main purpose of the package. This could be a lightened version of what you have in the README, for example.
- [ ] Vignette has an Installation section.
Consider adding an "Installation" section with:
```{r, eval=FALSE}
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("ROTS")
```
- [ ] When relevant, vignette provides review/comparison to other packages with similar functionality or scope
I am not familiar with ROTS, but would a comparison between LimROTS and ROTS be useful for the users, to highlight the benefits of using LimROTS?
Unit tests
- [ ] Unit tests present and covering large part of core functionality.
Several tests are included, but not for the main user-facing function LimROTS(). Consider adding tests for this function.
R code
- [ ] Re-use of classes and functionality (if appropriate).
As suggested, consider using SummarizedExperiment as a container for the results object.
-
[ ] Functional programming: no code repetition.
-
[ ] Function argument names descriptive and documented.
IMO, B argument is rather obscure. Why not something more generic, eg niter? I would suggest renaming this argument.
In SanityChecK(), many arguments are not used (eg, a1, formula.str, ...). Consider removing them if they are not used.
- [ ] Function arguments are tested for validity.
Perhaps this is linked to the point just above, but if meta.info, group.name or fomula (and perhaps other arguments) are not specified (default are NULL), LimROTS() will throw an error. Consider adding failsafe mechanisms to handle these cases. Or even better, consider having these arguments as required (ie do not specify any default value), if they are indeed necessary for the function to run.
- [ ] Parallelisation uses
BiocParallel.
For parallelized computing, could you rely on BiocParallel generic infrastructure, rather than parallel? Or do you have a strong reason not to use it? You may find that it is easier to maintain in the long term.
Hi @js2264
Thank you again for taking the time to provide the review for the package. I am almost done addressing all of the comments, but regarding BiocParallel, I tried to make it work on Windows with SnowParam. Unfortunately, it cannot access the unexported functions from the package. As a result, using BiocParallel for now will restrict the package to be used only on Linux and macOS. I am unsure if there is a way to export these functions to the workers, or if I may have overlooked something.
Great to read that you are making good progress.
Regarding SnowParam(): which unexported functions do you want to use within a SnowParam call? Some from your package? It should run ok, AFAICT. Would you mind sharing more detail?
Yes the functions are from my package.
So, this is the modified Boot_parallel function.
Boot_parallel <- function(i , seed.cl = 1234, samples, data,
formula.str, group.name, groups, meta.info,
a1 = NULL, a2 = NULL, trend = TRUE, robust = TRUE,
permutating.group = FALSE) {
samples.R <- split(samples[i, ], groups)
d_result <- s_result <- pd_result <- ps_result <- NULL
if (is.null(a1) | is.null(a2)) {
fit <- Limma_bootstrap(
x = lapply(samples.R, function(x) data[, x]),
group.name = group.name, meta.info = meta.info,
formula.str = formula, trend = trend, robust = robust
)
d_result <- fit$d
s_result <- fit$s
}
pFit <- Limma_permutating(
x = lapply(split(seq_len(length(groups)), groups), function(x) data[, x]),
group.name = group.name, meta.info = meta.info,
formula.str = formula, trend = trend, robust = robust,
permutating.group = permutating.group
)
pd_result <- pFit$d
ps_result <- pFit$s
return ( list(
ds = data.frame(d_result = d_result, s_result = s_result),
pdps = data.frame(pd_result = pd_result, ps_result = ps_result)
) )
}
Then, this function was called from the main LimROTS function as follows:
BPPARAM <- SnowParam(workers = 4)
results_list <- bplapply(seq_len(nrow(samples)), FUN = Boot_parallel,
BPPARAM = cluster,
seed.cl = seed.cl,
samples = samples,
data = data,
formula.str = formula.str,
group.name = group.name,
groups = groups,
meta.info = meta.info,
a1 = a1 , a2 = a2,
trend = trend,
robust = robust,
permutating.group = permutating.group)
Which throws an error
Error in Limma_bootstrap(x = lapply(samples.R, function(x) data[, x]), : could not find function "Limma_bootstrap"
I tried to export them using the exports option from BPOPTIONS, but it did not work either. This is happening when creating vignettes, and I try to build the package using devtools::build().
Hi @js2264
Regarding BiocParallel, I got it to work. I’m not sure if this is the ideal solution, but it works with BiocParallel now.
I had to export the functions to the workers in this way.
for (name in names(export_funcs)) assign(name, export_funcs[[name]])
The Boot_parallel() function now look like this
Boot_parallel <- function(cluster = NULL, seed.cl, samples, data,
formula.str, group.name, groups,
meta.info, a1, a2, trend, robust,
permutating.group) {
if (is.null(cluster)) {
if (isWindows()) {
cluster <- SnowParam(workers = 2)
message("Using SnowParam (Windows) with two workers.")
} else {
cluster <- MulticoreParam(workers = 2)
message("Using MulticoreParam (Unix-like OS) with two workers.")
}
} else {
message("Using provided parallel backend cluster.")
}
cluster$RNGseed <- seed.cl
export_vars <- list(
samples = samples,
data = data,
formula.str = formula.str,
group.name = group.name,
groups = groups,
meta.info = meta.info,
a1 = a1,
a2 = a2,
trend = trend,
robust = robust,
permutating.group = permutating.group
)
export_funcs <- list(
Limma_bootstrap = Limma_bootstrap,
Limma_permutating = Limma_permutating
)
for (name in names(export_vars)) assign(name, export_vars[[name]])
for (name in names(export_funcs)) assign(name, export_funcs[[name]])
results_list <- bplapply(
seq_len(nrow(samples)),
function(i) {
samples.R <- split(samples[i, ], groups)
d_result <- s_result <- pd_result <- ps_result <- NULL
if (is.null(a1) | is.null(a2)) {
fit <- Limma_bootstrap(
x = lapply(samples.R, function(x) data[, x]),
group.name = group.name, meta.info = meta.info,
formula.str = formula.str, trend = trend, robust = robust
)
}
d_result <- fit$d
s_result <- fit$s
df1 <- data.frame(d_result = d_result, s_result = s_result)
pFit <- Limma_permutating(
x = lapply(split(seq_len(length(groups)), groups), function(x)
data[, x]),
group.name = group.name, meta.info = meta.info,
formula.str = formula.str, trend = trend,
robust = robust, permutating.group = permutating.group
)
pd_result <- pFit$d
ps_result <- pFit$s
df2 <- data.frame(pd_result = pd_result, ps_result = ps_result)
list(ds = df1, pdps = df2)
},
BPPARAM = cluster, BPOPTIONS = bpoptions(packages = c("utils", "stringr", "stats", "limma"))
)
return(results_list)
}
@AliYoussef96 let's see what the Bioc Builder says and move from there. I'll review your changes once you've bumped version and pushed to bioconductor upstream!
Received a valid push on git.bioconductor.org; starting a build for commit id: 4836bd3b41c235246bd5e8b4b90b17296d2786eb
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
Congratulations! The package built without errors or warnings on all platforms.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.5.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: 6162c3783186430d57e4ddbd9dd1bd636cf7064c
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "ERROR". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.6.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: eab542235eb0cdc63ab91515e0255c91ab648c7b
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "ERROR". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.7.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: cf739fb0bb7fee0519e7dc1ba3d018cff7c834d4
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
On one or more platforms, the build results were: "ERROR". This may mean there is a problem with the package that you need to fix. Or it may mean that there is a problem with the build system itself.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.8.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.
Received a valid push on git.bioconductor.org; starting a build for commit id: be2394ccc98089dc0ff7df5c963176863a5c1efc
Dear Package contributor,
This is the automated single package builder at bioconductor.org.
Your package has been built on the Bioconductor Single Package Builder.
Congratulations! The package built without errors or warnings on all platforms.
Please see the build report for more details.
The following are build products from R CMD build on the Single Package Builder: Linux (Ubuntu 24.04.1 LTS): LimROTS_0.99.9.tar.gz
Links above active for 21 days.
Remember: if you submitted your package after July 7th, 2020,
when making changes to your repository push to
[email protected]:packages/LimROTS to trigger a new build.
A quick tutorial for setting up remotes and pushing to upstream can be found here.