Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 更新输入功能不支持';观察后才能生效_R_Shiny - Fatal编程技术网

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 <-

按下“Test Bins”(测试箱)按钮应使ObserveeEvent功能在滑块更新后打印30,然后打印25和35,但在更新SliderInput之前和之后都会重复打印30。出于某种原因,observeEvent代码似乎没有处理滑块输入中的更改

ui.R:

服务器.R:

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")
  })
}

server
input$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")
  })
}