Creating An ExperimentHub Package


ExperimentHubData provides tools to add or modify resources in Bioconductor's ExperimentHub. This 'hub' houses curated data from courses, publications or experiments. The resources are generally not files of raw data (as can be the case in AnnotationHub) but instead are R / Bioconductor objects such as GRanges, SummarizedExperiment, data.frame etc. Each resource has associated metadata that can be searched through the ExperimentHub client interface.

New resources

Resources are contributed to ExperimentHub in the form of a package. The package contains the resource metadata, man pages, vignette and any supporting R functions the author wants to provide. This is a similar design to the existing Bioconductor experimental data packages except the data are stored in AWS S3 buckets or publicly accessibly sites instead of the data/ directory of the package.

Below are the steps required for adding new resources.

Notify Bioconductor team member

The man page and vignette examples in the data experiment package will not work until the data are available in ExperimentHub. Adding the data to AWS S3 and the metadata to the production database involves assistance from a Bioconductor team member. The metadata.csv file will have to be created before the data can officially be added to the hub (See inst/extdata section below). Please read the section of "Storage of Data Files".

Building the data experiment package

When a resource is downloaded from ExperimentHub the associated data experiment package is loaded in the workspace making the man pages and vignettes readily available. Because documentation plays an important role in understanding these curated resources please take the time to develop clear man pages and a detailed vignette. These documents provide essential background to the user and guide appropriate use the of resources.

Below is an outline of package organization. The files listed are required unless otherwise stated.


An example data experiment package metadata.csv file can be found here






Data objects

Data are not formally part of the software package and are stored separately in a publicly accessible hosted site or by Bioconductor in an AWS S3 buckets. The author should read the following section on "Storage of Data Files".


When you are satisfied with the representation of your resources in make-metadata.R (which produces metadata.csv) the Bioconductor team member will add the metadata to the production database. Confirm the data in inst/exdata/metadata.csv are valid by running ExperimentHubData:::makeExperimentHubMetadata() on your package. Please address and warnings or errors.

Package review

Once the data are in AWS S3 or public site and the metadata have been added to the production database the man pages and vignette can be finalized. When the package passes R CMD build and check it can be submitted to the package tracker for review. The package should be submitted without any of the data that is now located remotely; This keeps the package light weight and minimual size while still providing access to key large data files now stored remotely If the data files were added to the github repository please see removing large data files and clean git tree to remove the large files and reduce package size.

Many times these data package are created as a suppliment to a software package. There is a process for submitting mulitple package under the same issue.

Add additional resources

Metadata for new versions of the data can be added to the same package as they become available.

Contact or with any questions.

Bug fixes

A bug fix may involve a change to the metadata, data resource or both.

Update the resource

Update the metadata

New metadata records can be added for new resources but modifying existing records is discouraged. Record modification will only be done in the case of bug fixes.

Remove resources

Removing resources should be done with caution. The intent is that ExperimentHub be a 'reproducible' resource by providing a stable snapshot of the data. Data made available in Bioconductor version x.y.z should be available for all versions greater than x.y.z. Unfortunately this is not always possible. If you find it necessary to remove data from ExperimentHub please contact or for assistance.

When a resource is removed from ExperimentHub the 'status' field in the metadata is modified to explain why they are no longer available. Once this status is changed the ExperimentHub() constructor will not list the resource among the available ids. An attempt to extract the resource with '[[' and the EH id will return an error along with the status message. The function getInfoOnIds will display metadata information for any resource including resources still in the database but no longer available.

Storage of Data Files

The data should not be included in the package. This keeps the package light weight and quick for a user to install. This allows the user to investigate functions and documentation without downloading large data files and only proceeding with the download when necessary. There are two options for storing data: Bioconductor AWS S3 buckets or hosting the data elsewhere on a publicly accessible site. See information below and choose the options that fits best for your situation.

Hosting Data on a Publicly Accessible Site

Data can be accessed through the hubs from any publicly accessible site. The metadata.csv file[s] created will need the column Location_Prefix to indicate the hosted site. See more in the description of the metadata columns/fields below but as a quick example if the link to the data file is ftp://mylocalserver/singlecellExperiments/dataSet1.Rds an example breakdown of the Location_Prefix and RDataPath for this entry in the metadata.csv file would be ftp://mylocalserver/ for the Location_Prefix and singlecellExperiments/dataSet1.Rds for the RDataPath.

Uploading Data to S3

Instead of providing the data files via dropbox, ftp, etc. we will grant temporary access to an S3 bucket where you can upload your data. Please email for access.

You will be given access to the 'AnnotationContributor' user. Ensure that the AWS CLI is installed on your machine. See instructions for installing AWS CLI here. Once you have requested access you will be emailed a set of keys. There are two options to set the profile up for AnnotationContributor

  1. Update your .aws/config file to include the following updating the keys accordingly:
[profile AnnotationContributor]
output = text
region = us-east-1
aws_access_key_id = ****
aws_secret_access_key = ****
  1. If you can't find the .aws/config file, Run the following command entering appropriate information from above
aws configure --profile AnnotationContributor

After the configuration is set you should be able to upload resources using

# To upload a full directory use recursive:

aws --profile AnnotationContributor s3 cp test_dir s3://annotation-contributor/test_dir --recursive --acl public-read

# To upload a single file

aws --profile AnnotationContributor s3 cp test_file.txt s3://annotation-contributor/test_file.txt --acl public-read

Please upload the data with the appropriate directory structure, including subdirectories as necessary (i.e. top directory must be software package name, then if applicable, subdirectories of versions, ...). Please also do not forget to use the flag --acl public-read; This allows read access to the data file.

Once the upload is complete, email to continue the process. To add the data officially the data will need to be uploaded and the metadata.csv file will need to be created in the github repository.


The best way to validate record metadata is to read inst/extdata/metadata.csv with ExperimentHubData::makeExperimentHubMetadata(). If that is successful the metadata are ready to go.

Example metadata.csv file and more information

As described above the metadata.csv file (or multiple metadata.csv files) will need to be created before the data can be added to the database. To ensure proper formatting one should run AnnotationHubData::makeAnnotationHubMetadata on the package with any/all metadata files, and address any ERRORs that occur. Each object uploaded to S3 should have an entry in the metadata file. Briefly, a description of the metadata columns required:

Any additional columns in the metadata.csv file will be ignored but could be included for internal reference.

More on Location_Prefix and RDataPath. These two fields make up the complete file path url for downloading the data file. If using the Bioconductor AWS S3 bucket the Location_Prefix should not be included in the metadata file[s] as this field will be populated automatically. The RDataPath will be the directory structure you uploaded to S3. If you uploaded a directory MyAnnotation/, and that directory had a subdirectory v1/ that contained two files counts.rds and coldata.rds, your metadata file will contain two rows and the RDataPaths would be MyAnnotation/v1/counts.rds and MyAnnotation/v1/coldata.rds. If you host your data on a publicly accessible site you must include a base url as the Location_Prefix. If your data file was at ftp://myinstiututeserver/biostats/project2/counts.rds, your metadata file will have one row and the Location_Prefix would be ftp://myinstiututeserver/ and the RDataPath would be biostats/project2/counts.rds.

This is a dummy example but hopefully it will give you an idea of the format. Let's say I have a package myExperimentPackage and I upload two files one a SummarizedExperiments of expression data saved as a .rda and the other a sqlite database both considered simulated data. You would want the following saved as a csv (comma seperated output) but for easier view we show in a table:

Title | Description | BiocVersion | Genome | SourceType | SourceUrl | SourceVersion | Species | TaxonomyId | Coordinate_1_based | DataProvider | Maintainer | RDataClass | DispatchClass | RDataPath ---------------|----------------------------------------------|-----|-------------|-----|----------------------------------------------------------------------------------------------------|------------|-------------|------|------|---------|-------------------------------------------------------|-----------|----------|-------------------------------------------------------------------------- Simulated Expression Data | Simulated Expression values for 12 samples and 12000 probles | 3.9 | NA | Simulated | http://mylabshomepage | v1 | NA | NA | NA | | Bioconductor Maintainer | SummarizedExperiment | Rda | myExperimentPackage/SEobject.rda Simulated Database | Simulated Database containing gene mappings | 3.9 | hg19 | Simulated | | v2 | Home sapiens | 9606 | NA | | Bioconductor Maintainer | SQLiteConnection | SQLiteFile | myExperimentPackage/mydatabase.sqlite

Try the ExperimentHub package in your browser

Any scripts or data that you put into this service are public.

ExperimentHub documentation built on April 17, 2021, 6:01 p.m.