| Title: | Identification and classification of plant transcription factors |
|---|---|
| Description: | planttfhunter is used to identify plant transcription factors (TFs) from protein sequence data and classify them into families and subfamilies using the classification schemes implemented in PlantTFDB and TAPscan. TFs are also classified into structure-based families, classes, and superclasses as in Plant-TFClass. TFs are identified using pre-built hidden Markov model profiles for DNA-binding domains. Then, auxiliary and forbidden domains are used with DNA-binding domains to classify TFs into families and subfamilies (when applicable). TFs can be classified in 58 different TF families/subfamilies with PlantTFDB's scheme, and in over 130 families of transcription-associated proteins with TAPscan's scheme. |
| Authors: | FabrÃcio Almeida-Silva [aut, cre] (ORCID: <https://orcid.org/0000-0002-5314-2964>), Yves Van de Peer [aut] (ORCID: <https://orcid.org/0000-0003-4327-3730>) |
| Maintainer: | FabrÃcio Almeida-Silva <[email protected]> |
| License: | GPL-3 |
| Version: | 1.13.1 |
| Built: | 2026-10-07 08:39:12 UTC |
| Source: | https://github.com/bioc/planttfhunter |
Protein sequences are scanned with HMMER for domains used by the classification schemes of PlantTFDB and TAPscan. For PlantTFDB, PFAM and self-built profile HMMs are used with the domain-specific score cutoffs defined by PlantTFDB (or an E-value threshold, for domains without cutoffs). For TAPscan, TAPscan v4 profile HMMs are used with their gathering (GA) thresholds, as in the original TAPscan implementation.
annotate_domains(seq = NULL, evalue = 1e-05, threads = 1)annotate_domains(seq = NULL, evalue = 1e-05, threads = 1)
seq |
An |
evalue |
Numeric indicating the E-value threshold for |
threads |
Numeric indicating the number of threads to be used
by |
A list of 2 data frames named PlantTFDB and TAPscan, with domain annotation for each classification scheme. Both data frames have one row per domain hit and the following variables:
Character, gene ID.
Character, domain ID or name.
Numeric, length of the profile HMM.
Numeric, conditional E-value of the domain hit.
Numeric, start and end coordinates of the alignment in the profile HMM.
Rows are kept in the same order as in the HMMER output, as this order is used by the TAPscan classification algorithm.
data(gsu) seq <- gsu[1:5] if(hmmer_is_installed()) { annotate_domains(seq) }data(gsu) seq <- gsu[1:5] if(hmmer_is_installed()) { annotate_domains(seq) }
TFs are classified using the classification schemes of PlantTFDB, TAPscan, and Plant-TFClass.
classify_tfs( domain_annotation = NULL, scheme = c("all", "PlantTFDB", "TAPscan", "PlantTFClass") )classify_tfs( domain_annotation = NULL, scheme = c("all", "PlantTFDB", "TAPscan", "PlantTFClass") )
domain_annotation |
A list of data frames with domain annotation,
as returned by |
scheme |
Character indicating which classification scheme(s) to return. One of 'all' (all schemes), 'PlantTFDB', 'TAPscan', or 'PlantTFClass'. Default: 'all'. |
PlantTFDB and TAPscan classifications are based on the domains found in each gene. Plant-TFClass is a structure-based classification of TFs into superclasses, classes, and families, and Plant-TFClass classifications are inferred from TAPscan classifications using a correspondence table between the two classification systems. When a TAPscan subfamily corresponds to more than one Plant-TFClass family (e.g., TAPscan's AP2 includes Plant-TFClass's AP2, ERF/DREB, and RAV), PlantTFDB subfamilies are used to resolve the ambiguity. If the ambiguity cannot be resolved (e.g., the gene was not classified by PlantTFDB), all possible classifications are reported, separated by ';'.
In all schemes, classification levels without a more specific level are filled with the name of the more general level. For example, PlantTFDB family bHLH has no subfamilies, so its subfamily is bHLH.
The classification schemes are available in the data sets
planttfdb_scheme (PlantTFDB), tapscan_scheme
(TAPscan), and planttfclass_scheme (correspondence between
TAPscan and Plant-TFClass).
A data frame with one row per gene and the following variables (if scheme = "all"):
Gene ID.
TF family according to PlantTFDB.
TF subfamily according to PlantTFDB.
TF family according to TAPscan.
TF subfamily according to TAPscan.
Class of transcription-associated protein (TAP)
according to TAPscan: transcription factor (TF), transcriptional
regulator (TR), or putative TAP (PT). See data(tap_class).
TF superclass according to Plant-TFClass.
TF class according to Plant-TFClass.
TF family according to Plant-TFClass.
Only genes classified by at least one scheme are included. Genes not classified by a scheme have NA in the respective variables. Genes assigned to more than one PlantTFDB family have families (and subfamilies, in the same order) separated by ';'.
If scheme is 'PlantTFDB', 'TAPscan', or 'PlantTFClass', only variable Gene and the variables of the chosen scheme are returned, and only genes classified by that scheme are included. Note that TAPscan classifies not only TFs, but also transcriptional regulators and putative TAPs, which can be distinguished using the variable TAP_class.
Jin, J., Tian, F., Yang, D. C., Meng, Y. Q., Kong, L., Luo, J., & Gao, G. (2017). PlantTFDB 4.0: toward a central hub for transcription factors and regulatory interactions in plants. Nucleic Acids Research, 45(D1), D1040-D1045.
Petroll, R., Varshney, D., Hiltemann, S., Finke, H., Schreiber, M., de Vries, J., & Rensing, S. A. (2025). Enhanced sensitivity of TAPscan v4 enables comprehensive analysis of streptophyte transcription factor evolution. The Plant Journal, 121(1), e17184.
Blanc-Mathieu, R., Dumas, R., Turchi, L., Lucas, J., & Parcy, F. (2024). Plant-TFClass: a structural classification for plant transcription factors. Trends in Plant Science, 29(1), 40-51.
data(gsu_annotation) families <- classify_tfs(gsu_annotation) head(families) # Only TAPscan classifications, with TAP classes (TF, TR, or PT) tapscan_families <- classify_tfs(gsu_annotation, scheme = "TAPscan") table(tapscan_families$TAP_class)data(gsu_annotation) families <- classify_tfs(gsu_annotation) head(families) # Only TAPscan classifications, with TAP classes (TF, TR, or PT) tapscan_families <- classify_tfs(gsu_annotation, scheme = "TAPscan") table(tapscan_families$TAP_class)
SummarizedExperiment objectThis function counts TFs per family (or other classification level) in
each species from TF classifications obtained with classify_tfs(),
and returns the counts as a SummarizedExperiment object.
get_tf_counts( families, species_metadata = NULL, scheme = c("PlantTFDB", "TAPscan", "PlantTFClass"), level = "family" )get_tf_counts( families, species_metadata = NULL, scheme = c("PlantTFDB", "TAPscan", "PlantTFClass"), level = "family" )
families |
A named list of data frames with TF classifications for
each species, as returned by |
species_metadata |
(Optional) A data frame containing species names
in row names (names must match element names in
the families list), and species metadata
(e.g., taxonomic information, ecological information)
in columns. If NULL, the colData of the |
scheme |
Character indicating which classification scheme to use. One of 'PlantTFDB', 'TAPscan', or 'PlantTFClass'. Default: 'PlantTFDB'. |
level |
Character indicating the classification level at which TFs will be counted. Possible levels depend on the classification scheme: 'family' or 'subfamily' for PlantTFDB and TAPscan, and 'superclass', 'class', or 'family' for Plant-TFClass. Default: 'family'. |
A SummarizedExperiment object containing TF frequencies per family (or other level) in each species, as well as species metadata (if species_metadata is not NULL). The rowData of the object contains the more general classification levels of each row (if any), which can be used to aggregate counts, as well as the TAP class of each row for TAPscan. For PlantTFDB, genes assigned to more than one family are counted once for each family. For Plant-TFClass, genes with ambiguous classifications (i.e., multiple possible families separated by ';') are counted in a separate row with all possible families.
data(gsu_annotation) gsu_families <- classify_tfs(gsu_annotation) # Simulate TF classifications for 4 species by sampling 100 genes set.seed(123) families <- list( Gsu1 = gsu_families[sample(nrow(gsu_families), 100), ], Gsu2 = gsu_families[sample(nrow(gsu_families), 100), ], Gsu3 = gsu_families[sample(nrow(gsu_families), 100), ], Gsu4 = gsu_families[sample(nrow(gsu_families), 100), ] ) # Create species metadata species_metadata <- data.frame( row.names = names(families), Division = "Rhodophyta", Origin = c("US", "Belgium", "China", "Brazil") ) # Count TFs per PlantTFDB family se <- get_tf_counts(families, species_metadata) # Count TAPscan TFs (excluding TRs and PTs) per subfamily tapscan_tfs <- lapply(families, function(x) x[x$TAP_class %in% "TF", ]) se_tapscan <- get_tf_counts( tapscan_tfs, scheme = "TAPscan", level = "subfamily" ) se_tapscan # Count TFs per Plant-TFClass superclass se_superclass <- get_tf_counts( families, scheme = "PlantTFClass", level = "superclass" )data(gsu_annotation) gsu_families <- classify_tfs(gsu_annotation) # Simulate TF classifications for 4 species by sampling 100 genes set.seed(123) families <- list( Gsu1 = gsu_families[sample(nrow(gsu_families), 100), ], Gsu2 = gsu_families[sample(nrow(gsu_families), 100), ], Gsu3 = gsu_families[sample(nrow(gsu_families), 100), ], Gsu4 = gsu_families[sample(nrow(gsu_families), 100), ] ) # Create species metadata species_metadata <- data.frame( row.names = names(families), Division = "Rhodophyta", Origin = c("US", "Belgium", "China", "Brazil") ) # Count TFs per PlantTFDB family se <- get_tf_counts(families, species_metadata) # Count TAPscan TFs (excluding TRs and PTs) per subfamily tapscan_tfs <- lapply(families, function(x) x[x$TAP_class %in% "TF", ]) se_tapscan <- get_tf_counts( tapscan_tfs, scheme = "TAPscan", level = "subfamily" ) se_tapscan # Count TFs per Plant-TFClass superclass se_superclass <- get_tf_counts( families, scheme = "PlantTFClass", level = "superclass" )
Data obtained from PLAZA Diatoms. Only genes containing domains used for TF family classification (with PlantTFDB's or TAPscan's schemes) were kept for package size issues.
data(gsu)data(gsu)
An AAStringSet object as returned
by Biostrings::readAAStringSet().
Osuna-Cruz, C. M., Bilcke, G., Vancaester, E., De Decker, S., Bones, A. M., Winge, P., ... & Vandepoele, K. (2020). The Seminavis robusta genome provides insights into the evolutionary adaptations of benthic diatoms. Nature communications, 11(1), 1-13.
data(gsu)data(gsu)
annotate_domains().Domain annotation for the algae species Galdieria sulphuraria
The data set was created using the function annotate_domains().
data(gsu_annotation)data(gsu_annotation)
A list of 2 data frames (PlantTFDB and
TAPscan) with domain annotation, as returned
by annotate_domains().
data(gsu_annotation)data(gsu_annotation)
Check if HMMER is installed
hmmer_is_installed()hmmer_is_installed()
Logical indicating whether HMMER is installed (i.e., whether
the program hmmsearch is in the PATH) or not.
hmmer_is_installed()hmmer_is_installed()
Table used by classify_tfs() to infer Plant-TFClass superclasses,
classes, and families from TAPscan families and subfamilies.
TAPscan families/subfamilies with multiple rows correspond to more than
one Plant-TFClass family, and the PlantTFDB subfamily of each gene
(variable PlantTFDB_subfamily) is used to choose among them.
data(planttfclass_scheme)data(planttfclass_scheme)
A data frame with the following variables:
TAPscan family.
TAPscan subfamily (or family, for families without subfamilies).
Plant-TFClass superclass.
Plant-TFClass class.
Plant-TFClass family (or class, for classes without families).
PlantTFDB subfamily used to choose among multiple Plant-TFClass families for the same TAPscan family/subfamily. NA for TAPscan families/subfamilies with a single Plant-TFClass family.
Blanc-Mathieu, R., Dumas, R., Turchi, L., Lucas, J., & Parcy, F. (2024). Plant-TFClass: a structural classification for plant transcription factors. Trends in Plant Science, 29(1), 40-51.
data(planttfclass_scheme)data(planttfclass_scheme)
The classification scheme is the same as the one used by PlantTFDB,
except for three family/subfamily names that were changed to match the
output of classify_tfs() ('M_type' to 'M-type', 'MYB_related' to
'MYB-related', and 'LBD (AS2/LOB)' to 'LBD'). As in PlantTFDB, families
without subfamilies have the family name as subfamily.
data(planttfdb_scheme)data(planttfdb_scheme)
A data frame with the following variables:
TF family name.
TF subfamily name.
DNA-binding domain
Auxiliary domain
Forbidden domain
Jin, J., Tian, F., Yang, D. C., Meng, Y. Q., Kong, L., Luo, J., & Gao, G. (2016). PlantTFDB 4.0: toward a central hub for transcription factors and regulatory interactions in plants. Nucleic acids research, gkw982.
data(planttfdb_scheme)data(planttfdb_scheme)
Families of transcription-associated proteins (TAPs) in TAPscan v4, their classes, descriptions, and references. Data were obtained from TAPscan's website (file _data/import-tapinfo/tapinfo_v4.csv in the GitHub repository Rensing-Lab/TAPscan-v4-website). HTML tags in descriptions and references were removed. Family MADS_MIKC, which is not included in the original file, was manually added as a TF family (as family MADS), without description and references.
data(tap_class)data(tap_class)
A data frame with the following variables:
TAP family or subfamily, as in the variable
TAPscan_subfamily of the output of classify_tfs().
TAP class. One of 'TF' (transcription factor), 'TR' (transcriptional regulator), or 'PT' (putative TAP).
Description of the TAP family.
References for the TAP family, separated by ' | '.
Petroll, R., Varshney, D., Hiltemann, S., Finke, H., Schreiber, M., de Vries, J., & Rensing, S. A. (2025). Enhanced sensitivity of TAPscan v4 enables comprehensive analysis of streptophyte transcription factor evolution. The Plant Journal, 121(1), e17184.
data(tap_class)data(tap_class)
TAPscan v4 classification rules (v82), with one row per rule. Genes are assigned to a family (and subfamily, if any) if they have all domains in variable Should and none of the domains in variable Should_not. For families with more than one rule (e.g., bZIP), genes are assigned to the family if they satisfy any of the rules.
data(tapscan_scheme)data(tapscan_scheme)
A data frame with the following variables:
TAPscan family, as in variable TAPscan_family of
the output of classify_tfs().
TAPscan subfamily, as in variable
TAPscan_subfamily of the output of classify_tfs().
Families without subfamilies have the family name as subfamily.
Name of the rule in TAPscan's rules file.
Domains that genes should have, separated by ' and '. Numbers in parentheses (e.g., 'Myb_DNA-binding (2)') indicate the required number of copies of a domain.
Domains that genes should not have, separated by ' or '.
TAP class. One of 'TF' (transcription factor),
'TR' (transcriptional regulator), or 'PT' (putative TAP). NA for
families without a TAP class in TAPscan (see tap_class).
Petroll, R., Varshney, D., Hiltemann, S., Finke, H., Schreiber, M., de Vries, J., & Rensing, S. A. (2025). Enhanced sensitivity of TAPscan v4 enables comprehensive analysis of streptophyte transcription factor evolution. The Plant Journal, 121(1), e17184.
data(tapscan_scheme)data(tapscan_scheme)