обновить блестящий ввод с помощью наблюдаемого события - PullRequest
0 голосов
/ 13 января 2019

Я бы хотел, чтобы пользователь определял начальное числовое значение, которое затем обновляется (то есть добавляется к) на определенную величину при каждом нажатии кнопки действия. Я использую реактивный, чтобы попытаться сделать это обновление, но получаю страшную Операция не разрешена без активного реактивного контекста ошибка. Я в замешательстве, потому что я думал, что использование реактивного делает что-то внутри реактивного выражения , но, очевидно, я не прав

Я искал соответствующие вопросы / статьи / учебные пособия, но оказался пустым. Любой совет высоко ценится. И, пожалуйста, дайте мне знать, если есть лучший способ выполнить эту задачу, то есть, если я должен использовать различные функции или методы.

Ниже урезанная версия моего кода:

library(shiny)

ui <- fluidPage(

    ## initilize the value
    numericInput('init.i','initial i',10),

    ## click this button to add one to the initial value
    actionButton("run","Run"),

    ## output the current count
    textOutput("cur.i")

)

server <- function(input,output) {

    ## define the current value according to the inital value
    i <- reactiveVal({
        input$init.i ## this line fails
        ##1 ## this line doesn't fail but value always initializes at 1 
    })

    observeEvent(input$run, {
        ## make a new value by adding 1 to the current value
        new.i <- i() + 1
        ## update the value
        i(new.i)

        output$cur.i <- renderText({
            ## print the current value
            i()
        })
    })

}

shinyApp(ui=ui,server=server)

1 Ответ

0 голосов
/ 14 января 2019

Следующие работы. Как блестящие отчеты вам, то, что вы пытаетесь сделать, не допускается. Это инициализация i(), где вы используете input$init.i, которая требует реактивного контекста.

Требуемый эффект может быть достигнут путем установки еще одного observeEvent на начальное значение, которое вы хотите (input$init.i), в качестве значения реактивности.

library(shiny)
ui <- fluidPage(

  ## initilize the value
  numericInput('init.i','initial i', 10),

  ## click this button to add one to the initial value
  actionButton("run","Run"),

  ## output the current count
  textOutput("cur.i")

)
server <- function(input,output) {

  ## Define the reactive value (with no 'inital' value)
  i <- reactiveVal()

  ## Set i() based on "initialize" input widget
  observeEvent(input$init.i, { 
    i(input$init.i)
  })

  observeEvent(input$run, {
    ## make a new value by adding 1 to the current value
    new.i <- i() + 1
    ## update the value
    i(new.i)
   })

  output$cur.i <- renderText({
    i()
  })
}
shinyApp(ui = ui, server = server)

Кроме того, нет необходимости вкладывать renderText в observeEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...