Я пытаюсь превратить следующий урезанный кадр данных, состоящий из символов, в пригодный для использования формат для решателя обыкновенных дифференциальных уравнений (ODE).
> dput(head(Species,5))
structure(list(Species = c("HOCl", "OCl-", "NH2Cl", "NHCl2",
"H2O2"), DeltaSpecies = c("dHOCl", "dOCl-", "dNH2Cl", "dNHCl2",
"dH2O2")), row.names = c(NA, 5L), class = "data.frame")
Примерным форматом для решателя ODE будет
# time sequence
time <- seq(0, 50, by = 0.01)
# parameters: a named vector
parameters <- c(r = 2, k = 0.5, e = 0.1, d = 1)
# initial condition: a named vector
state <- c(V = 1, P = 3)
# R function to calculate the value of the derivatives at each time value
# Use the names of the variables as defined in the vectors above
lotkaVolterra <- function(t, state, parameters){
with(as.list(c(state, parameters)), {
dV = r * V - k * V * P
dP = e * k * V * P - d * P
return(list(c(dV, dP)))
})
}
Где класс каждой переменной числовой, я считаю (и затем преобразованной в список).
Мой вопрос заключается в том, в какой формат мне нужно преобразовать мой фрейм данных, заполненный символьными строками, чтобы использовать его в решателе ODE, и как я могу присвоить значения этим переменным?Это становится особенно сложным, поскольку некоторые строки символов содержат специальные символы, которые требуют использования обратных кавычек (например, backtick OCl-backtick).Я присвоил числовые значения этим переменным ранее в сценарии (например, HOCL <- 5 и backtick OCl- backtick <- 5. </p>
Существует ли способ присвоения значений каждому уникальному виду / переменной априори, а затем преобразовать фрейм данных из строк в эти переменные? Нужно ли вообще делать это для решателя ODE?
Я пытался использовать следующее: list2env(setNames(as.list(Species$Species),Species$Species), .GlobalEnv)
, но это не похоже на успех.