Превращение кадра данных в пригодный для использования формат для ODE - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь превратить следующий урезанный кадр данных, состоящий из символов, в пригодный для использования формат для решателя обыкновенных дифференциальных уравнений (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), но это не похоже на успех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...