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

时间:2016-06-08 18:38:06

标签: 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)

错误消息:

  

没有活动的反应上下文时,不允许操作。 (你试过了   做一些只能从被动反应中做的事情   表达或观察者。)

3 个答案:

答案 0 :(得分:5)

您只需要将reactiveif一起使用,以便在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)

答案 1 :(得分: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)

答案 2 :(得分:2)

这是我的尝试。 1)如上所述,您不需要在反应上下文中包含输入$ a并另存为x。只需使用输入$ a 2)在这个简单的例子中你不需要reactiveValues。只需将y保存为反应变量。然后,在renderText中,通过调用函数(“y()”)

进行访问
GeocodeServiceClient geocodeService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService");