Реактивное значение не обновляется, когда оно должно - PullRequest
0 голосов
/ 08 апреля 2019

Я новичок в Shiny, и я думаю, что не понимаю какой-то основной принцип.Как заставить мои переменные обновляться?

И переменная1, и добавленный выходной $ являются реактивными, поэтому они не меняются на экране после нажатия кнопки и как их изменить?

library(shiny)

# Define UI for application that draws a histogram
ui <- fluidPage(

  # Show a plot of the generated distribution
  mainPanel(
    textInput("inserted", "Insert a number"),
    textOutput("written"),
    textOutput("added"),
    actionButton("button1", "Push me")
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

   variable1 <- reactive({
     as.numeric(input$inserted)
   })

   assign15tovar <- function() {
     variable1 <<- reactive({
       15
     })
   }

   observeEvent(input$button1, {
     assign15tovar()
   })

   output$written <- variable1
   output$added <- reactive({
     variable1() + 10
   })
}

# Run the application 
shinyApp(ui = ui, server = server)

Код является лишь примером моей проблемы в моем реальном приложении, но решение этой проблемы должно помочь.

1 Ответ

0 голосов
/ 08 апреля 2019

Я думаю, что это самый простой способ получить желаемое поведение

server <- function(input, output) {

  variable1 <- reactiveVal(0)

  observeEvent(input$inserted, {
    variable1(as.numeric(input$inserted))
  })

  assign15tovar <- function() {
    variable1(15)
  }

  observeEvent(input$button1, {
    assign15tovar()
  })

  output$written <- renderText({variable1()})
  output$added <- renderText({variable1() + 10})
}

Обычно вы не можете вручную установить значения реактивных элементов, поэтому вам нужно reactiveVal специально, которое позволяет вам установитьэто ценность.В этом случае variable1() возвращает текущее значение, а variable1(newval) устанавливает новое значение.И тогда в этом случае нам нужно наблюдать текстовое поле на предмет изменений.

И обратите внимание, что ваши выходные операторы были неверны.Обычно вам нужен какой-то тип функции render().Как правило, вы не назначаете им напрямую.

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