library(deSolve) times <- seq(0, 10, by = 1) signal <- data.frame(times = times, import = rep(0, length(times))) Text=read.csv("input.csv") head(signal) signal$import <- ifelse((trunc(signal$times) %% 2 == 0), 0, 1) #signal[8:12,] head(signal) input <- approxfun(Text, rule = 2) #input(seq(from = 0.98, to = 1.01, by = 0.005)) SPCmod <- function(t, x, parms) { with(as.list(c(parms, x)), { import <- input(t) # <---- here dS <- 2*import - b * S * P + g * C dP <- c * S * P - d * C * P dC <- e * P * C - f * C res <- c(dS, dP, dC) list(res, signal = import) }) } parms <- c(b = 0.1, c = 0.1, d = 0.1, e = 0.1, f = 0.1, g = 0) xstart <- c(S = 1, P = 1, C = 1) out <- ode(y = xstart, times = times, func = SPCmod, parms) head(out)