Значение, присвоенное объекту, заключенному в выражение наблюдения, дает мне разные значения при входе или выходе IF - PullRequest
0 голосов
/ 28 февраля 2019

Я проводил некоторые тесты с выражениями observe и reactive, когда только что построил выражение, которое дает мне два разных значения для одного и того же объекта, внутри и снаружи if.Небольшой пример:

library(shiny)

ui <- fluidPage()

server <- function(input, output, session) {

  a <- 1
  b <- 2

  observe({
    if(a != b) {
      print(paste0("inside ", a))
      a <- b
    }

    print(paste0("outside ", a))
    invalidateLater(1000)
  })
} 

shinyApp(ui, server)

По иронии судьбы, по крайней мере для меня, объект «a» вне if получает значение, назначенное внутри, но собственный «a» изнутри не может «видеть» обновление.

Может ли кто-нибудь объяснить мне, почему это происходит, и как я могу сделать так, чтобы условный тест тоже выглядел, если значение изменилось, например reactivePoll, но используя его только для обновления виджетов вместо получения значения?

1 Ответ

0 голосов
/ 28 февраля 2019

Используйте reactiveVal, если вы хотите построить реактивное значение.Смотрите ?reactiveVal для более подробной информации.Попробуйте это:

server <- function(input, output, session) {
  #Here we build the reactive values
  #Both a and b are functions. 
  #Calling them with no argument retrieves the value
  #You set the value if you call them with an argument
  a <- reactiveVal(1)
  b <- reactiveVal(2)

  observe({
    if(a() != b()) {
      print(paste0("inside ", a()))
      #here we set the value of a() the same as b()
      a(b())
    }

    print(paste0("outside ", a()))
    invalidateLater(1000)
  })
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...