В этом скрипте вызов invalidateLater () обновляет происходящее каждые 1,5 секунды. У меня также есть кнопка настройки для вызова функции (add.to.queue) с использованием наблюдающего события; однако, это выполняется каждый раз, когда invalidateLater принят. Я хочу, чтобы функция add.to.queue () вызывалась только при нажатии кнопки, а не каждый раз, когда происходит invalidateLater. Что здесь происходит / как я могу это исправить?
add.to.queue <- function(object, ev, timestep) {
print("add.to.queue called")
timestep <- timestep+1+length(queue)
ev <- call("object", list(input = list(ev, timestep+1),
showPlot=TRUE,
timeStep=timestep+1
))
queue$timestep <<- ev
}
ui <- fluidPage(
# Application title
titlePanel("Neuron"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
sliderInput("slider", "Slider", 2, 1000, dt),
actionButton("sendSpike", "Send Spike")
),
# Show a plot of the generated distribution
mainPanel(
# textOutput("count"),
plotOutput("neuron1")
)
)
)
server <- function(input, output, session) {
observeEvent("sendSpike", add.to.queue(neuron.1, "37", timeStep$current))
timeStep <- reactiveValues(current = 2)
# instantiate neurons
neuron.1 <- RAF
output$neuron1 <- renderPlot({
invalidateLater(millis = 1500, session)
timeStep$current <- isolate(timeStep$current) + 1
print(queue)
queueLatest(timeStep$current)
neuron.1(timeStep = timeStep$current)
})
}
shinyApp(ui = ui, server = server)
Решение: Мне нужно было добавить ignoreInit = TRUE, чтобы наблюдать за событием, а также изменить Наблюдение за событием на вход $ sendSpike:
observeEvent(input$sendSpike, add.to.queue(neuron.1, "37", timeStep$current, ignoreInit = TRUE))