问题描述
我正在尝试使用sqlite数据库开发R Shiny应用程序。但是我从数据库中获取任何数据时都遇到此错误。错误消息是:
Loading required package: shiny
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter,lag
The following objects are masked from ‘package:base’:
intersect,setdiff,setequal,union**
应用内显示:
[object Object]
代码如下:
# Libraries
library(stats)
library(shiny)
library(Rsqlite)
library(dtplyr)
library(dplyr)
library(DBI)
# Globar Variables
db <- dbConnect (sqlite(),"/Users/sudiptobosu/200922/20200714PPCP.sqlite")
# Global Function
names_ppcp = dbGetQuery(db,"SELECT ALL PPCP FROM mydata")
#server
shinyServer(function (input,output,session) {
dplyr::filter
stats::filter
output$ppcpOut <- reactive({
input$user1
})
output$propertyOut <- reactive({
input$user2
})
ppcpquery <- reactive({
input$user1
})
queryy <- reactive({
gsub("<ppc>",ppcpquery(),"SELECT Solubility FROM mydata WHERE PPCP = '<ppc>'")
})
output$valueout <- reactive({
dbGetQuery(db,queryy())
})
#propertyquery <- eventReactive ({input$user2})
session$onSessionEnded (function() {
dbdisconnect(db)
})
})
#ui
ui <- fluidPage (
titlePanel("bo-DEREC CE"),sidebarLayout(
sidebarPanel(
selectInput("user1","Select the PPCP",choices = names_ppcp),selectInput("user2","Select the property",choices = c("Solubility","Volatility","Adsorbability","Degradability"))
),mainPanel(
textoutput("ppcpOut"),textoutput("propertyOut"),textoutput("valueout")
)
)
)
解决方法
数据帧不应使用textOutput
呈现在用户界面上,而应使用tableOutput
呈现。然后将响应呼叫调整为renderTable
。通常,input$
对象应该包装在reactive
中。另外,请考虑正确进行参数设置,例如使用DBI:sqlInterpolate
:
服务器调整
...
# INPUTS
ppcpquery <- reactive({
input$user1
})
propertyquery <- reactive({
input$user2
})
# OUTPUTS
output$ppcpOut <- renderText({
ppcpquery()
})
output$propertyOut <- renderText({
propertyquery()
})
output$valueOut <- renderTable({
# PREPARED STATEMENT WITH PLACEHOLDER
sql <- "SELECT Solubility FROM mydata WHERE PPCP = ?ppc")
# BIND PARAMETER
query <- DBI::sqlInterpolate(db,sql,ppc = ppcpquery())
# RUN QUERY AND RETURN RESULTS
dbGetQuery(db,query)
})
用户界面调整
...
mainPanel(
textOutput("ppcpOut"),# ALIGNS TO renderText
textOutput("propertyOut"),# ALIGNS TO renderText
tableOutput("valueOut") # ALIGNS TO renderTable
)
现在,如果dbGetQuery
返回一个单行单列数据帧,则可以在renderText
中使用server
,在textOutput
中使用ui
。但是从列中提取值:
dbGetQuery(db,query)$Solubility[[1]]