R 更新输入功能不支持';观察后才能生效
按下“Test Bins”(测试箱)按钮应使ObserveeEvent功能在滑块更新后打印30,然后打印25和35,但在更新SliderInput之前和之后都会重复打印30。出于某种原因,observeEvent代码似乎没有处理滑块输入中的更改 ui.R: 服务器.R:R 更新输入功能不支持';观察后才能生效,r,shiny,R,Shiny,按下“Test Bins”(测试箱)按钮应使ObserveeEvent功能在滑块更新后打印30,然后打印25和35,但在更新SliderInput之前和之后都会重复打印30。出于某种原因,observeEvent代码似乎没有处理滑块输入中的更改 ui.R: 服务器.R: library(shiny) shinyServer(function(input, output, session) { output$distPlot <- renderPlot({ x <-
library(shiny)
shinyServer(function(input, output, session) {
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
observeEvent(input$test,{
print(input$bins)
updateSliderInput(session,"bins",value=25)
print(input$bins)
updateSliderInput(session,"bins",value=35)
print(input$bins)
})
})
库(闪亮)
shinyServer(功能(输入、输出、会话){
输出$distPlot直到observeEvent
函数结束,更改才会生效。如果需要在观察者内部使用滑块的新值,可以使用额外的变量
在下面的示例中,您的代码被修改为显示滑块(以及相关的input$bins
变量)将如何更新,直到observeEvent
函数结束
库(闪亮)
uiGeovany的回答非常有用。我还查看了jcheng5的回答:这有助于我更改服务器,以便您可以在观察者中使用滑块的新值,而无需添加额外变量。服务器的调整代码:
server <- function(input, output, session)
{
output$distPlot <- renderPlot(
{
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
v <- reactiveValues(bins=NULL)
observe(
{
v$bins <- input$bins
}, priority = 10)
updateSliderValue <- function(val)
{
updateSliderInput(session=session, inputId="bins", value=val)
v$bins <- val
}
observeEvent(input$test,{
updateSliderValue(25)
cat("Slider updated to:", v$bins, "\n")
cat("Observer ends\n")
})
observeEvent(input$bins, {
cat("Slider changed to:", print(v$bins), "\n")
})
}
serverinput$bin
在当前observeEvent()中没有反应
。input$bins
上的一个单独的ObserveeEvent
将在点击按钮前后打印值。这是有意义的??这适用于单个更新,但是如果我在ObserveeEvent中有多个更新调用,并且需要在每个更新调用后打印该怎么办?只有最后一个更新会起作用。更新功能只是将滑块标记给我们e一个新值,但Shiny将修改滑块,直到观察者结束。您可以使用多个观察者。如果您对滑块的显示更改感兴趣,可以使用一些JavaScript。
server <- function(input, output, session)
{
output$distPlot <- renderPlot(
{
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
v <- reactiveValues(bins=NULL)
observe(
{
v$bins <- input$bins
}, priority = 10)
updateSliderValue <- function(val)
{
updateSliderInput(session=session, inputId="bins", value=val)
v$bins <- val
}
observeEvent(input$test,{
updateSliderValue(25)
cat("Slider updated to:", v$bins, "\n")
cat("Observer ends\n")
})
observeEvent(input$bins, {
cat("Slider changed to:", print(v$bins), "\n")
})
}