本文介绍了基于用户输入从R SHINY中的反应性上下文中获取值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要根据从侧边栏选择的输入更改mydb(字符串)值。

ui.R

library(shiny)
shinyUI(fluidPage(
  titlePanel("Shiny App"),
  sidebarLayout(
    sidebarPanel( selectInput("site",
                          label = "Choose a site for Analysis",
                          choices = c("abc", "def",
                                      "ghi", "jkl"),
                          selected = "abc")
              ),
    mainPanel(
      textOutput("text"),
     )
))

server.R

library(shiny)
library(ggplot2)
library(RMySQL)

shinyServer(function(input, output) {
    if(input$site=="abc"){
      mydb<-"testdb_abc"}
   else if(input$site=="def"){
     mydb<-"testdb_def"}
      con <- dbConnect(MySQL(),dbname=mydb, user="root", host="127.0.0.1", password="root")
      query <- function(...) dbGetQuery(con, ...)

      output$text <- renderText({
        paste("You have selected:",input$site)
      })

})

在上面的server.R中,我需要根据选择的输入将字符串值分配给mydb。我收到此错误:

Error in .getReactiveEnvironment()$currentContext() :
  Operation not allowed without an active reactive context. (You tried to do something     that can only be done from inside a reactive expression or observer.)

如何在SHILINY中使用反应性执行此操作?

推荐答案

如前所述,您必须在反应式表达式中使用If语句,或者下面的observe是示例应用程序的工作示例。在这里,我使用了一个反应式表达式来检查您选择了哪个数据库。然后,您可以使用mydb()并将其放入您的查询中,如下所示(我认为这应该可以):

con <- dbConnect(MySQL(),dbname=mydb(), user="root", host="127.0.0.1", password="root")
query <- function(...) dbGetQuery(con, ...)

示例如下

library(shiny)
library(ggplot2)
library(RMySQL)

ui =fluidPage(
  titlePanel("Shiny App"),
    sidebarPanel(selectInput("site",
                              label = "Choose a site for Analysis",
                              choices = c("abc", "def","ghi", "jkl"),selected = "abc")),
    mainPanel(textOutput("text"),textOutput("db_select"))
  )


server = (function(input, output) {

  mydb <- reactive({

    if(input$site == "abc")
      {
        test <- c("testdb_abc")
      }
    else if(input$site == "def")
      {
        test <- c("testdb_def")
      }
  })

  output$text <- renderText({
    paste("You have selected:",input$site)
  })

  query_output <- reactive({
    con <- (dbConnect(MySQL(),dbname=mydb(), user="root", host="127.0.0.1", password="root"))
    query <- function(...) dbGetQuery(con, ...)
  })

  output$db_select <- renderText({
    paste("My Database is:",mydb())
  })
})


runApp(list(ui = ui, server = server))

这篇关于基于用户输入从R SHINY中的反应性上下文中获取值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-25 09:20