我正在尝试构建一个闪亮的应用程序。我在数据库中有3个表。该应用程序将从MySQL检索数据表并在Web界面上弹出。在ui函数中提到了所有选项。从我的MySQL中检索数据时,我已经写了3次readtable命令。有没有从一个可读表中检索数据的选项?
library(shiny)
# Define UI for dataset viewer application
ui<-fluidPage(
# Application title.
titlePanel("More Widgets"),
sidebarLayout(
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("table1", "table2","table3")),
numericInput("obs", "Number of observations to view:", 10),
submitButton("Update View")
),
mainPanel(
h4("Observations"),
tableOutput("view")
)
)
)
# Define server logic required to summarize and view the
# selected dataset
server<-function(input, output) {
conn <- dbConnect(drv = RMySQL::MySQL(),dbname = "xxx",host = "localhost",
username = "root",password = "yyy")
on.exit(dbDisconnect(conn), add = TRUE)
table1<- dbReadTable(conn = conn, name = 'table1', value = as.data.frame(table1))
table2<- dbReadTable(conn = conn, name = 'table2', value = as.data.frame(table2))
table3<- dbReadTable(conn = conn, name = 'table3', value = as.data.frame(table3))
# Return the requested dataset
datasetInput <- reactive({
switch(input$dataset,
"table1" = table1,
"table2" = table2,
"table3" = table3
)
})
# Show the first "n" observations
output$view <- renderTable({
head(datasetInput(), n = input$obs)
})
on.exit(dbDisconnect(conn), add = TRUE)
}
shinyApp(ui, server)
答案 0 :(得分:0)
for()
功能可能有效:
data <- c('table1', 'table2', 'table3')
list_data <- list()
for(i in 1:length(data)) {list_data[i] <- dbReadTable(conn = conn, name = data[i], value = as.data.frame(table1))}
答案 1 :(得分:0)
如果表格不是很大,您可以选择更简单的解决方案,即用以下内容替换output $ view
output$view <- renderTable({
head(dbReadTable(conn = conn, name = input$dataset), n = input$obs)
})
此代码不像代码那样缓存表,但更简单。但是,如果数据库中的表不是很大,则性能损失会很小。
答案 2 :(得分:0)
您可以使用input $ dataset而不是在dbReadTable语句中手动编写数据集的名称。
注意:如果表中的行大约为30,000,它将正常工作。
希望这会有所帮助。