Как правильно отреагировать на результат реактивного значения в блестящем? - PullRequest
1 голос
/ 03 мая 2020

Я новичок в блеске, и совершенно запутался с reactiveValue, особенно когда дело касается функции render. Вот мой игрушечный пример, который просто не может получить правильное значение.

он дает результат argument 1 (type 'list') cannot be handled by 'cat', даже если я пытаюсь unlist его, все равно получаю сообщение об ошибке.

С моим ограниченным пониманием, reactiveValue наблюдает за окружением, когда что-то изменилось, он возвращает всю информацию плюс перечисленные переменные, например, x & y.

Я пытаюсь изменить значение x и y actionButton с, но просто не могу получить результат должным образом.

Пожалуйста, сообщите и большое спасибо.

  library(shiny)
  rm(list = ls())

  ui <- fluidPage(
    actionButton("act1", "less x"),
    actionButton("act2", "more y"),
    textOutput("final")
  )

  server <- function(input, output, session) {
    value <- reactiveValues(x = 100, y = 0)

    observeEvent(input$act1, {
      value$x <- value$x - 10
    })

    observeEvent(input$act2, {
      value$y <- value$y +10
    })
    # i hope both value of x and y can be presented. 
    output$final <- renderText(value)
  }

  shinyApp(ui, server)

1 Ответ

1 голос
/ 03 мая 2020

Вы можете использовать функцию reactiveValuestoList для преобразования вашего реактивного объекта в список, а затем распечатать его, используя renderPrint вместо renderText.

library(shiny)

ui <- fluidPage(
    actionButton("act1", "less x"),
    actionButton("act2", "more y"),
    textOutput("final")
)

server <- function(input, output, session) {
    value <- reactiveValues(x = 100, y = 0)

    observeEvent(input$act1, {
        value$x <- value$x - 10
    })

    observeEvent(input$act2, {
        value$y <- value$y +10
    })

    values <- reactive({
        reactiveValuesToList(value)
    })
    # i hope both value of x and y can be presented. 
    output$final <- renderPrint({
        values()
        })
}

shinyApp(ui, server)

Если вы хотите немного лучше для вывода используйте функцию paste для использования renderText.

    output$final <- renderText({
        paste("X = ", values()$x,"Y = ", values()$y)
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...