I am attempting to generate a plot using variables in my server code that can be changed- I’m not sure if I am formatting this wrong and that is why a plot is not generating. My goal is to generate a line plot depending on a change in the ‘mean sojourn time’ and ‘screen sensitivity’ (these are my input widgets)- a change in this variable impact the values of x and y in my line plot. I want to be able to visualize how changing these variables will change the line plot.
This is my current code:
library(shiny)
library(tidyverse)
ui <- fluidPage(numericInput(inputId = 'y',
label = 'Mean Sojourn Time',
value = '5',
min = '1'),
numericInput(inputId = 'pr',
label = 'Screen Senst',
value = '0',
min = '0',
max = '1',
step = '0.25'),
plotOutput(outputId = 'lineplot')
)
server <- function(input,output) {
output$lineplot <- renderPlot({
t_0 <- 40
startage <- 50
n <- 100000
k <- 30
x <- 0.58
lambda <- -(log(1-x))/k
y <- input$y
mu <- 1/y
num.screen <- 1:10
pr <- input$pr
counter <- 2
repeat{
id <- c()
t_p <- t_0 + rexp(n, lambda)
t_c <- t_p + rexp(n, mu)
newdf <- data.frame(t_p, t_c) %>%
filter (t_c <= 100)
cancerdf <- mutate(newdf, id = row_number()) %>%
select(id, everything())
result <- reframe(cancerdf, screen.num = num.screen,.by = id)
ddset <- cancerdf %>%
right_join(result, by= id) %>%
mutate(screen.age = screen.num + startage - 1) %>%
filter(t_c > startage,
t_c > screen.age) %>%
filter(t_c > screen.age | t_c-screen.age <= 1)
ddset$test.result = rbinom(nrow(ddset), 1, prob = pr)
new.ddset <- ddset %>%
filter(cumsum(test.result)<=1
& test.result==cummax(test.result), .by=id) %>%
filter(t_p < screen.age, t_c > screen.age) %>%
group_by(id) %>%
mutate(screen = (ifelse(test.result == 1 & t_c > screen.age, 1,0))) %>%
mutate(interval = ifelse(t_c - screen.age > 1, 0,1 ),
interval = ifelse(screen == 1 & interval == 1, 0,interval))
simulation.sensitivity <- new.ddset %>%
group_by(screen.age) %>%
summarise(screen = (sum(screen)),
interval = (sum(interval)),
sensitivity = (screen/ (screen + interval)))
counter <- counter - 1
if (counter == 0) {
break
}
simulation.sensitivity %>%
ggplot(aes(x = screen.age, y= sensitivity)) +
geom_point() +
geom_smooth(method = 'lm', se = FALSE)+
theme_minimal()
}})
}
shinyApp(ui=ui, server=server)
I don’t get an error, but no plot is rendering.