Я использую некоторые алгоритмы, которые используют приблизительное байесовское вычисление (например, см. Toni et al., 2009), и они требуют многократного решения системы уравнений Лотки-Вольтерра со случайно генерируемым набором входных данных параметры. Я использую функцию lsoda
от deSolve
package.Подавить ошибку от deSolve :: lsoda
Иногда эта функция вызывает ошибку, и я надеялся проигнорировать это, используя функцию try(..., silent = TRUE)
, хотя это, похоже, не работает (см. Пример ниже). Установка options(show.error.messages = FALSE)
не работает.
Как отключить печать сообщения об ошибке от deSolve :: lsoda?
require(deSolve)
# Differential equations defining the system
LV <- function(Time, State, Pars){
with(as.list(c(State, Pars)), {
dx <- a*x - x*y
dy <- b*x*y - y
return(list(c(dx, dy)))
}
)
}
# Parameters
pars <- c(a = 1.0, b = 1.0)
# Initial conditions
init <- c(x = 1.0, y = 0.5)
# Time steps
times <- seq(0, 15, length.out = 100)
problem_seeds <- c(7, 241, 361, 365, 468, 473, 649, 704, 724, 745, 838)
for (i in problem_seeds){
set.seed(i)
# Sample from pi(theta), prior for parameter vector (a, b)
theta_star <- runif(2, -10, 10)
names(theta_star) <- c("a", "b")
# Simulate a dataset using these parameters (at the specified times)
try(out <- lsoda(func = LV,
y = init,
parms = theta_star,
times = times),
silent = TRUE)
dfs <- as.data.frame(out)
}
Это полезная работа. Re: переписывание df - это всего лишь небольшая часть алгоритма ABC (просто для воспроизведения проблемы), в главном алгоритме используется датафрейм перед перезаписью. Я подожду, чтобы узнать, есть ли у кого-то мысли о том, как подавить ошибку. Большое спасибо за ответ. –
Вы читали это? https://stat.ethz.ch/pipermail/r-sig-dynamic-models/2013q1/000164.html –
Я пробовал Google и SO, но не видел этого. Спасибо, что поделился! Похоже, что проблема все еще присутствует в 2016 году после публикации в 2013 году. О, хорошо, я попробую обход, который они предлагают. Спасибо. –