I have an S4 object named 'res' which I got while using an R package called RDAVIDWebService. I can't seem to find a way to convert this object into a dataframe in R.
I tried using the function 'as.data.frame(res)' but it throws this error:
> as.data.frame(res)
Error in as.data.frame.default(res) :
cannot coerce class ‘structure("DAVIDFunctionalAnnotationTable", package = "RDAVIDWebService")’ to a data.frame
The structure of the object looks like this:
> str(res)
Formal class 'DAVIDFunctionalAnnotationTable' [package "RDAVIDWebService"] with 4 slots
..@ Genes :'data.frame': 3011 obs. of 3 variables:
Formal class 'DAVIDGenes' [package "RDAVIDWebService"] with 5 slots
.. .. ..@ .Data :List of 3
.. .. .. ..$ : chr [1:3011] "22574630" "3544383" "3544385" "3544382" ...
.. .. .. ..$ : chr [1:3011] "1,2-Dihydroxy-3-keto-5-methylthiopentene dioxygenase,
putative(LPMP_204190)" "10 kDa heat shock protein(Tc00.1047053508209.100)" "10 kDa heat shock
protein(Tc00.1047053508209.120)" "10 kDa heat shock protein(Tc00.1047053508209.90)" ...
.. .. .. ..$ : Factor w/ 11 levels "Leishmania braziliensis MHOM/BR/75/M2904",..: 6 10 10 10
10 10 10 2 6 6 ...
.. .. ..@ names : chr [1:3] "ID" "Name" "Species"
.. .. ..@ row.names: chr [1:3011] "1" "2" "3" "4" ...
.. .. ..@ .S3Class : chr "data.frame"
.. .. ..@ type : chr "Gene List Report"
..@ Dictionary:List of 10
.. ..$ COG_ONTOLOGY :'data.frame': 18 obs. of 2 variables:
.. .. ..$ ID : chr [1:18] "Translation, ribosomal structure and biogenesis" "Lipid
metabolism" "Cell division and chromosome partitioning" "General function prediction only" ...
.. .. ..$ Term: chr [1:18] "" "" "" "" ...
.. ..$ GOTERM_BP_DIRECT:'data.frame': 215 obs. of 2 variables:
.. .. ..$ ID : chr [1:215] "GO:0006457" "GO:0051603" "GO:0008152" "GO:0006412" ...
.. .. ..$ Term: chr [1:215] "protein folding" "proteolysis involved in cellular protein
catabolic process" "metabolic process" "translation" ...
.. ..$ GOTERM_CC_DIRECT:'data.frame': 84 obs. of 2 variables:
.. .. ..$ ID : chr [1:84] "GO:0005737" "GO:0016021" "GO:0005634" "GO:0005839" ...
.. .. ..$ Term: chr [1:84] "cytoplasm" "integral component of membrane" "nucleus" "proteasome
core complex" ...
.. ..$ GOTERM_MF_DIRECT:'data.frame': 222 obs. of 2 variables:
.. .. ..$ ID : chr [1:222] "GO:0010309" "GO:0018580" "GO:0051213" "GO:0004298" ...
.. .. ..$ Term: chr [1:222] "acireductone dioxygenase [iron(II)-requiring] activity"
"nitronate monooxygenase activity" "dioxygenase activity" "threonine-type endopeptidase
activity" ...
.. ..$ INTERPRO :'data.frame': 695 obs. of 2 variables:
.. .. ..$ ID : chr [1:695] "IPR004313" "IPR011051" "IPR014710" "IPR011032" ...
.. .. ..$ Term: chr [1:695] "Acireductone dioxygenase ARD family" "RmlC-like cupin domain"
"RmlC-like jelly roll fold" "GroES-like" ...
.. ..$ KEGG_PATHWAY :'data.frame': 363 obs. of 2 variables:
.. .. ..$ ID : chr [1:363] "ldo00071" "ldo00280" "ldo01100" "lmi00280" ...
.. .. ..$ Term: chr [1:363] "Fatty acid degradation" "Valine, leucine and isoleucine
degradation" "Metabolic pathways" "Valine, leucine and isoleucine degradation" ...
.. ..$ PIR_SUPERFAMILY :'data.frame': 44 obs. of 2 variables:
.. .. ..$ ID : chr [1:44] "PIRSF000868" "PIRSF002144" "PIRSF002134" "PIRSF002122" ...
.. .. ..$ Term: chr [1:44] "14-3-3 protein" "ribosomal protein, S19p/S19a/S15e/organellar S19
types" "ribosomal protein, S13p/S13a/S18e/organellar S13 types" "ribosomal protein,
S7p/S7a/S5e/organellar S7 types" ...
.. ..$ SMART :'data.frame': 90 obs. of 2 variables:
.. .. ..$ ID : chr [1:90] "SM00883" "SM00101" "SM01386" "SM01387" ...
.. .. ..$ Term: chr [1:90] "SM00883" "14_3_3" "SM01386" "SM01387" ...
.. ..$ UP_KEYWORDS :'data.frame': 116 obs. of 2 variables:
.. .. ..$ ID : chr [1:116] "Coiled coil" "Complete proteome" "Dioxygenase" "Oxidoreductase"
...
.. .. ..$ Term: chr [1:116] "" "" "" "" ...
.. ..$ UP_SEQ_FEATURE :'data.frame': 13 obs. of 2 variables:
.. .. ..$ ID : chr [1:13] "chain:60S ribosomal protein L18" "chain:Probable eukaryotic
initiation factor 4A" "domain:Helicase ATP-binding" "domain:Helicase C-terminal" ...
.. .. ..$ Term: chr [1:13] "" "" "" "" ...
..@ Membership:List of 10
.. ..$ COG_ONTOLOGY : logi [1:3011, 1:18] FALSE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:18] "Translation, ribosomal structure and biogenesis" "Lipid metabolism"
"Cell division and chromosome partitioning" "General function prediction only" ...
.. ..$ GOTERM_BP_DIRECT: logi [1:3011, 1:215] FALSE TRUE TRUE TRUE TRUE TRUE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:215] "GO:0006457" "GO:0051603" "GO:0008152" "GO:0006412" ...
.. ..$ GOTERM_CC_DIRECT: logi [1:3011, 1:84] FALSE TRUE TRUE TRUE TRUE TRUE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:84] "GO:0005737" "GO:0016021" "GO:0005634" "GO:0005839" ...
.. ..$ GOTERM_MF_DIRECT: logi [1:3011, 1:222] TRUE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:222] "GO:0010309" "GO:0018580" "GO:0051213" "GO:0004298" ...
.. ..$ INTERPRO : logi [1:3011, 1:695] TRUE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:695] "IPR004313" "IPR011051" "IPR014710" "IPR011032" ...
.. ..$ KEGG_PATHWAY : logi [1:3011, 1:363] FALSE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:363] "ldo00071" "ldo00280" "ldo01100" "lmi00280" ...
.. ..$ PIR_SUPERFAMILY : logi [1:3011, 1:44] FALSE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:44] "PIRSF000868" "PIRSF002144" "PIRSF002134" "PIRSF002122" ...
.. ..$ SMART : logi [1:3011, 1:90] FALSE TRUE TRUE TRUE TRUE TRUE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:90] "SM00883" "SM00101" "SM01386" "SM01387" ...
.. ..$ UP_KEYWORDS : logi [1:3011, 1:116] TRUE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:116] "Coiled coil" "Complete proteome" "Dioxygenase" "Oxidoreductase"
...
.. ..$ UP_SEQ_FEATURE : logi [1:3011, 1:13] FALSE FALSE FALSE FALSE FALSE FALSE ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : NULL
.. .. .. ..$ : chr [1:13] "chain:60S ribosomal protein L18" "chain:Probable eukaryotic
initiation factor 4A" "domain:Helicase ATP-binding" "domain:Helicase C-terminal" ...
..@ type : chr "Functional Annotation Table"
Also, is there a generalized way of converting any S4 object into a dataframe without caring about the data inside the object? This is important because the S4 objects I'm fetching with this R package could have varying number of lists/variables/characters inside each of the 4 slots(i.e. @Genes, @Dictionary, @Membership and @type).
The conversion won't really work unless somebody wrote a method for it. One thing you could try is check whether
RDAVIDWebService
has a function to write the data out to file, and then use that as a proxy to (re)import the data as adata.frame
.Maybe take a look at the discussions here.
P.S. I'm curious, but what happens when you call
data.frame(res)
?Yes, RDAVIDWebService has a function to export the data, but it's not something that suits my objective. I'm trying to build an R package, which would involve fetching outputs ( which would be S4 objects) several times. So exporting the results every single time is not a good solution in my opinion, which is why I'm looking for an alternative.
The output looks like this:
Hmm, you're right. That definitely wouldn't work then. And looks like coercion won't play ball at all here.
I think you're just going to have to write a method yourself. Given you'd be using it in a package, I think it's a worthy investment.
Are you developing a replacement for
RDAVIDWebService
by any chance?Please note that this package requires user registration with package provider, to get the results.