1

これは、毎秒 1 から 10 の間の数字を描画するおもちゃの例です。描画されたばかりの実際の数字と前に描画された数字の差が 1 に等しい場合にのみ、これらの数字を表示したいと考えています。描画される数字の順序は [5,7,8,2,3] です。[8,3]を連続して表示したい。反応値と分離機能がすべてだと思いますが、私が望んでいたことを実現できませんでした。解説で失敗した試み。

library(shiny)


ui <- shinyUI(fluidPage(
  mainPanel(
    textOutput("time"),
    textOutput("num")
  )
))

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

  autoInvalidate <- reactiveTimer(1000)
  timestamp<-reactive({
    autoInvalidate()
    Sys.time()
  })

  random_num<-reactive({
    autoInvalidate()
    sample(x=seq(1,10),size = 1,replace = FALSE,pro)
  })

# My attempt : obviously do not work
#   values <- reactiveValues(old=1)
#   observe({
#     if (random_num()==values$old) {values$display=random_num()}
#     else {values$old=random_num()}
#   })  

  output$time <- renderText({paste("time :",timestamp())})
  output$num <- renderText({paste("num :",random_num())})
  #My attempt : obviously do not work
  # output$num <- renderText({paste("num :",isolate(values$display))})
}

shinyApp(ui, server)

私のように見える質問があることは知っていますが、それはまったく異なります。

4

1 に答える 1

3

ここに例があります。

library(shiny)

old <- NULL

ui <- shinyUI(fluidPage(
  mainPanel(
    textOutput("time"),
    textOutput("num"),
    textOutput("num_raw")
  )
))

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

  autoInvalidate <- reactiveTimer(1000)

  timestamp<-reactive({
    autoInvalidate()
    Sys.time()
  })

  random_num<-reactive({
    autoInvalidate()
    r <- sample(x=seq(1,10),size = 1,replace = FALSE)
  })

  observe({
    output$time <- renderText({paste("time :",timestamp())})
    r <- random_num()
    if (!is.null(old) && r - old == 1) {
      output$num <- renderText({paste("num :",r)})
    }
    output$num_raw <- renderText({paste("raw num : ", r)})
    old <<- r
  })

}

shinyApp(ui, server)
于 2016-10-02T04:09:15.557 に答える