gpt4 book ai didi

r - 根据用户输入从 R Shiny 中的响应式(Reactive)上下文中获取值(value)

转载 作者:行者123 更新时间:2023-12-04 11:20:57 24 4
gpt4 key购买 nike

我需要根据从侧边栏中选择的输入更改 mydb(string) 值。
用户界面

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"),
)
))
服务器
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.)
我怎么能用 Shiny 的 react 来做到这一点?

最佳答案

如前所述,您必须在响应式(Reactive)表达式或 observe 中使用 if 语句。下面是示例应用程序的工作示例。在这里,我使用了一个响应式(Reactive)表达式来检查您选择了哪个数据库。然后您可以使用 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 - 根据用户输入从 R Shiny 中的响应式(Reactive)上下文中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27121665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com