The app I am working on is getting very complicated, so I am putting a lot of the code into modules.
My plots have tooltips which were working fine on the un-modularised version. However, now I am getting a "Error in : $ operator is invalid for atomic vectors" message.
I think it's the output$my_tooltip which is causing the error.
Here is the UI function for the plot,
# UI for plot
MA_sroc_plot_UI <- function(id) {
ns <- NS(id) # namespace function
tagList(
plotOutput(outputId = ns("plot"),
click = ns("plot_click")),
uiOutput(outputId = ns("my_tooltip"))
)
}
and below is the corresponding server-side function,
# Server function to generate and download plot
MA_sroc_plot_server <- function(id,
data,
draws) {
moduleServer(
id,
function(input, output, session) {
plot_object <- reactive({
# code to produce ggplot here
})
# Output ggplot object
output$plot <- renderPlot({ plot_object() })
# Download ggplot object
output$plot_download <- downloadHandler(
filename = function(){
paste("plot.png")
},
content = function(file) {
{ggsave(file, plot_object())}
}
)
# Make reactive dataset to display over plot
dataset <- reactive({
X <- req(data())
X
})
# values to display on plot
vals <- renderPrint({
click <- {input$plot_click}
y <- nearPoints(df = dataset(), click , xvar = "FPR", yvar = "Sensitivity" )
req(nrow(y) != 0)
y
})
# tooltip
output$my_tooltip <- renderUI({
ns <- session$ns
y <- nearPoints(df = dataset(), ns("plot_click") , xvar = "FPR", yvar = "Sensitivity" )
req(nrow(y) != 0)
verbatimTextOutput(vals())
})
}
)
}
Thanks.
P.S., apologies for not posting a minimal reproducible example (MRE). I only recently came across modules a few days ago so I am assuming I am just missing something obvious. If at a glance there appears to be nothing wrong with he code I posted, I can produce an MRE if it is necessary.