Hello,
I'm trying to convert a vector of string objects to a numeric object by
initializing the variables with values. I use the function below to scan
through a matrix and create mass action flux relationships:
makeMassActionFluxes = function(sMatrix) {
#Allocate a matrix with identical dimensions as the inputted stoichiometric
matrix
temp = matrix(nrow = dim(sMatrix)[1], ncol = dim(sMatrix)[2])
velocities = vector(length = dim(sMatrix)[2])
## This series of 'for' loops scans the stoichiometrix matrix looking
for
negative integers.
## Once it identifies a negative integer it pulls the row name and
exponentiates it to the
## appropriate stoichiometry, creating the flux expression.
for (i in 1:dim(sMatrix)[1]) {
for (j in 1:dim(sMatrix)[2]) {
if (sMatrix[i, j] >= 0) (temp[i, j] = NA)
else temp[i, j] = paste(rownames(sMatrix)[i], '^', -sMatrix[i, j], sep =
'')
}
}
## Scan temp by column. Ignore strings that begin with '1.' Use
paste()
to "multiply" strings.
for (k in 1:dim(temp)[2]) {#Loop through columns
velocities[k] = paste(c(temp[ , k]), sep = '', collapse = '*')
velocities[k] = gsub('*NA', '', velocities[k], fixed = TRUE)
velocities[k] = gsub('NA*', '', velocities[k], fixed = TRUE)
}
return(velocities)
}
If I pass in the following example matrix, I get a list of flux expressions
('v') just like I want:
testS = matrix(c(-1, 0, 2, -1, -1, 0, 0, -1, -1, 1, 0, 0, 0, 1, 0),
nrow = 5,
ncol = 3,
byrow = TRUE)
rownames(testS) = c("met1", "met2", "met3",
"met4", "met5")
colnames(testS) = c('rxn1', 'rxn2', 'rxn3')
v = makeMassActionFluxes(testS)
v
[1] "met1^1*met2^1" "met2^1*met3^1" "met3^1"
My next step is to use an ODE generating function to initialize values for
the met variables.
state = c(met1 = 10, met2 = 10, met3 = 10, met4 = 10, met5 = 10)
parameters = 1
ODE = function(t, state, parameters, S, velocity) {
with(as.list(c(state, parameters, S, velocity)), {
des = S %*% v
#The products should look like this:
#dmet1 = (-1)*met1^1*met2^1 + (0)*met2^1*met3^1 + (2)*met3^1
#Return
list(des)
})
}
When I call 'makeODE' I get the following error (which I expected):
Error in S %*% v : requires numeric/complex matrix/vector arguments
I'm wondering if there is an easy way to remove the quotes on the elements
on 'v' or make 'v' into a numeric vector so that I can
initialize them with
values? Or, is there an easier way to generate the flux expressions in my
'makeMassActionFluxes' function so that eventually passing in initial
values
for the met variables will be easier?
Thanks in advance!
Erin
--
Erin Rachael Shellman
The University of Michigan
Bioinformatics PhD Candidate
http://www.erinshellman.com
shellman@umich.edu
(937) 321.1129
[[alternative HTML version deleted]]