【发布时间】:2014-01-14 13:15:40
【问题描述】:
帮我解决这个错误:
Error in switch(code, ic9 = { : EXPR must be a length 1 vector
当我从一个单选按钮切换到另一个单选按钮时,它应该开始显示所选单选按钮的结果以及与之关联的结果。这就是为什么我使用了switch case,但是里面有错误。
代码:
library(shiny)
library(RPostgreSQL)
shinyServer(function(input, output){
# Return the requested dataset
inputCode <- reactive({
input$code
code <<- {switch(input$code,
i9= ic9,
i10= ic10)}
input$icd
})
dbConn <- function(inputCode,out){
con <- dbConnect(dbDriver("PostgreSQL"), user="postgres", password="xyz", dbname="ICD_9_10_Mapping", host = "localhost", port = 5432)
on.exit(dbDisconnect(con), add=TRUE)
query1 <- "SELECT icd_10_codes, description, flags FROM icd_9_10_dia WHERE icd_9_codes ='"
query2 <- "SELECT icd_9_codes, description, flags FROM icd_10_9_dia WHERE icd_10_codes ='"
switch(code,
ic9 = {X <<- query1},
ic10 = {X <<- query2})
invert <- "'"
stmt <- paste(X,toString(input$icd, width = 10),invert, sep = "")
res <- dbSendQuery(con, statement = stmt)
out <<- fetch(res, n = -1)
}
output$out1 <- renderTable(dbConn(inputCode,out))})
【问题讨论】:
-
您正在从反应式表达式内部分配全局变量
code;这几乎总是表明你走错了路。反应式表达式(即reactive({...}))只能用于计算值,而不是副作用。