Hello everyone,

Can you help me with code below, its SIR model calculated by euler method and I would need to write it into shiny app, so user can input the required data, which will then show the updated plot on the website:

```
# SIR Euler method
SIR_Euler <- function(S0, I0, R0, beta, gamma, days) {
# definition of beta, gamma and delta T
b <- beta
g <- gamma
delta_t <- 0.5
D <- days
# Definition of N_time for times of aproximation (here every 30 minutes, based on the days from input function)
nt <- (D*24)/delta_t
#Numeric object + size
I <- numeric(nt)
S <- numeric(nt)
R <- numeric(nt)
mistake <- numeric(nt)
# Setting index 1 and starting value of y0, which then helps to calculate y1 ...
I[1] <- I0
S[1] <- S0
R[1] <- R0
N <- I0 + S0 + R0
mistake[1] <- N - (I0 + S0 + R0)
# loop function for calculating aproximation based on days
n=1
for (n in 1:(nt)) {
S[n+1] = S[n] + (-b*S[n]*I[n]*delta_t)
I[n+1] = I[n] + (b*S[n]*I[n]*delta_t - g*I[n]*delta_t)
R[n+1] = R[n] + g*I[n]*delta_t
# mistake when making aproximation ... mistake is from equal of N = S(t) + I(t) + R(t)
mistake[n+1] <- N - (S[n+1]+I[n+1]+R[n+1])
}
# table of values of aproximation calculation for every x in interval each step h (30 minutes <--> 0.5h)
SIR_table <- data.frame(timet = 1:(nt+1), S=S, I=I, R=R, Mistake=mistake, Population=N, Time=D)
return(SIR_table)
}
SIR_plot <- function(data_table) {
plot(data_table$timet/48, data_table$S, main="SIR Euler Method", ylab = "Population", xlab = "time (Days)", type="l", col="blue", xlim=c(0, data_table$Time[1]), ylim=c(0, data_table$Population[1]))
lines(data_table$timet/48, data_table$I, col="red")
lines(data_table$timet/48, data_table$R, col="green")
legend("top", c("Susceptible","Infectious","Recovered"), fill=c("blue","red","green"))
}
SIR_plot(SIR_Euler(1000, 1, 0, 0.00002, 0.002, 100))
```