Nothing
"readSBMLR"<-function(filename)
{# SBMLR file input, SBML model object output
source(filename,local=TRUE) # loads in model as a list of lists
## initialize names for indexing by names/IDs of reactions, species and rules
#nSpecies=length(model$species)
#if (nSpecies>0){
#sIDs=NULL; # initialize before assignments
#for (i in 1:nSpecies) sIDs[i]<-model$species[[i]]$id
#names(model$species)<-sIDs
#}
# ********* Commented block above is much simpler with simplified lapply = sapply
if (length(model$species)>0)
names(model$species)<-sapply(model$species,function(x) x$id)
# not clear why I wanted this next block ... could probably get rid of it
# OK, see readSBML, it was free coming in from xmlTreeParse so I kept it,
# but I must have forgotten that this meant I would need to create it coming in from R source.
notes=model$notes
nNotes=length(notes)
if (nNotes>0){
con <- xmlOutputDOM()
con$addTag("notes", close=FALSE)
con$addTag("body",attrs=c(xmlns="http://www.w3.org/1999/xhtml"), close=FALSE )
for (i in 1:nNotes)
{
con$addTag("p",close=FALSE )
con$addNode(xmlTextNode(notes[i]))
con$closeTag()
}
con$closeTag();con$closeTag()
dom=con$value()[[1]]
model$htmlNotes=dom
}
# Make rules in MathML, expressions and functions
nRules=length(model$rules)
if (nRules>0){
ruleIDs=NULL
for (i in 1:nRules)
{
#cat(i," ",class(model$rules[[i]]$strLaw),"\n")
model$rules[[i]]$exprLaw=parse(text=model$rules[[i]]$strLaw)[[1]]
r=model$rules[[i]]$inputs
e=model$rules[[i]]$exprLaw
#print(r)
model$rules[[i]]$law=makeLaw(r,p=NULL,e)
#print("here")
model$rules[[i]]$mathmlLaw=R2MathML(e)$value()[[1]]
ruleIDs[i]<-model$rules[[i]]$idOutput
}
names(model$rules)<-ruleIDs
}
# Make reactions in MathML, expressions and functions
nReactions=length(model$reactions)
if (nReactions>0){
rIDs=NULL
for (i in 1:nReactions)
{
if (is.null(model$reactions[[i]]$reversible)) model$reactions[[i]]$reversible=FALSE
#cat(i," ",class(model$reactions[[i]]$strLaw),"\n")
model$reactions[[i]]$exprLaw=parse(text=model$reactions[[i]]$strLaw)[[1]]
r=model$reactions[[i]]$reactants
m=model$reactions[[i]]$modifiers
# r=c(r,m)
p=names(model$reactions[[i]]$parameters)
e=model$reactions[[i]]$exprLaw
model$reactions[[i]]$law=makeLaw(c(r,m),p,e)
# model$reactions[[i]]$law=makeLaw(r,p,e)
model$reactions[[i]]$mathmlLaw=R2MathML(e)$value()[[1]]
rIDs[i]<-model$reactions[[i]]$id
}
names(model$reactions)<-rIDs
}
class(model)<-"SBMLR"
return(model)
}
R2MathML <-function(e)
{ # takes R expressions into mathML XMLNode
a <- xmlOutputDOM()
r2ml<- function(type) # maps R operator symbols into MathML
switch(type,
"*" = "times",
"/" = "divide",
"+" = "plus",
"-" = "minus",
"^" = "power",
"exp" = "exp",
"log" = "ln",
"not found") # end of r2ml sub-function definition.
recurs<-function(e)
{ if(e[[1]]=="(") {e=e[[2]]} # remove parentheses
a$addTag("apply", close=FALSE )
a$addTag(r2ml(as.character(e[[1]])))
for (j in 2:length(e))
if ((class(e[[j]])=="name")|(class(e[[j]])=="numeric")) {
op<-switch(class(e[[j]]),name="ci",numeric="cn")
a$addTag(op,as.character(e[[j]]))
} else Recall(e[[j]])
a$closeTag()
}
recurs(e)
return(a)
}
# NOTE: because I decided to keep the mathML when reading SBML, to make it easier to save later,
# I thought I should make the mathML upfront from the SBMLR representation, so that the model in R
# is the same regardless of the source being SBML or SBMLR
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.