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
shell...@umich.edu
(937) 321.1129

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to