如何在R(Shiny)中创建具有被动值的IF语句

Lee*_*e88 4 r shiny

初学者到R,在这里闪亮!试图做一个最小的工作示例......我想检查一个无功输入值的条件.我究竟做错了什么?

library(shiny)

ui<-fluidPage(

  numericInput(inputId="a", label=NULL, value=0),
  textOutput(outputId="out")
)

server <- function(input, output) {
  x <- reactive(input$a)
  if (x() < 4) 
    {y<-1}
  else
  {y<-0}

  output$out <- renderText({y})
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

错误消息:

没有活动的反应上下文,不允许操作.(你试图做一些只能在反应式表达式或观察者内部完成的事情.)

Joh*_*aul 7

你只需要reactive与你一起使用,if以便闪亮知道什么时候y改变x.

library(shiny)

ui<-fluidPage(

  numericInput(inputId="a", label=NULL, value=0),
  textOutput(outputId="out")
)

server <- function(input, output) {
  x <- reactive(input$a)
  y <- reactive( if (x()<4) 1 else 0 )

  output$out <- renderText({ y() })
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)


tim*_*lio 5

John Paul的上述答案当然是可以接受的,但我认为你可能希望看到另一种方式作为你学习过程的一部分.我会让StackOverflow排除哪个更合适.

library(shiny)

ui<-fluidPage(

  numericInput(inputId="a", label=NULL, value=0),
  textOutput(outputId="out")
)

server <- function(input, output) {
  state <- reactiveValues()

  observe({
    state$x <- input$a
    state$y <- ifelse(state$x < 4, 1, 0)
  })

  output$out <- renderText({ state$y })
}

shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)