R 中的复选框输入服务器问题

checkboxinput server issues in R

我想在我的 UI 中有一个复选框,它将在我的服务器中充当 if 语句,但我不确定如何在服务器中正确编码该部分。在此示例中,我希望在选中该框时输出图表。

这是我的代码

ui <- fluidPage(

    titlePanel("title"),

    sidebarLayout(
        sidebarPanel(
            checkboxInput("EF", "Efficient Frontier")
        ),

        mainPanel(
            fluidRow(
                align = "center",
                plotOutput("Graphw")
            )
        )
    )
)

server <- function(input, output) {
    
                if(input$EF){
                    X <- function(a,b,c){
                        plot(c(a,b),c(b,c))
                         }
                }
    
                OPw <- reactiveValues()
                OPw$PC <- X(5,10,15)
                
                output$Graphw <- renderPlot({ 
                    OPw$PC
                })
}

shinyApp(ui = ui, server = server)

我需要添加某种反应值,但我不确定在哪里。任何帮助将不胜感激

我认为您可以不使用 reactiveValues 来完成此操作。将函数X设为独立函数,可以在renderPlot.

下调用
library(shiny)

X <- function(a,b,c){
  plot(c(a,b),c(b,c))
}

ui <- fluidPage(
  
  titlePanel("title"),
  
  sidebarLayout(
    sidebarPanel(
      checkboxInput("EF", "Efficient Frontier")
    ),
    
    mainPanel(
      fluidRow(
        align = "center",
        plotOutput("Graphw")
      )
    )
  )
)

server <- function(input, output) {
  
  output$Graphw <- renderPlot({ 
    if(input$EF){
      X(5,10,15)
    }
  })
}

shinyApp(ui = ui, server = server)

如果有效边界需要一些时间来绘制,我们可以使用 conditionalPanel 来显示或隐藏 plotOutput 而不是每次按下 checkboxInput 时使用 re-rendering .

library(shiny)

X <- function(a, b, c) {
  plot(c(a, b), c(b, c))
}

library(shiny)

ui <- fluidPage(
  titlePanel("title"),
  sidebarLayout(
    sidebarPanel(
      checkboxInput("EF", "Efficient Frontier")
    ),
    mainPanel(
      fluidRow(
        align = "center",
        conditionalPanel(
          condition = "input.EF == true",
          plotOutput("Graphw")
        )
      )
    )
  )
)

server <- function(input, output) {
  output$Graphw <- renderPlot({
    X(5, 10, 5)
  })
}

shinyApp(ui = ui, server = server)

另一个使用 reactiveValuesggplot

的版本
library(shiny)

ui <- fluidPage(
  titlePanel("title"),
  sidebarLayout(
    sidebarPanel(
      checkboxInput("EF", "Efficient Frontier")
    ),
    mainPanel(
      fluidRow(
        align = "center",
        conditionalPanel(
          condition = "input.EF == true",
          plotOutput("Graphw")
        )
      )
    )
  )
)

server <- function(input, output) {
  X <- function(a, b, c) {
    ggplot(mapping = aes(x = c(a, b), y = c(b, c))) +
      geom_point()
  }

  OPw <- reactiveValues(PC = NULL)

  observe({
    OPw$PC <- X(5, 10, 5)
  })



  output$Graphw <- renderPlot({
    OPw$PC
  })
}

shinyApp(ui = ui, server = server)