【问题标题】:Error in switch(code, ic9 = { : EXPR must be a length 1 vector开关错误(代码,ic9 = {:EXPR 必须是长度为 1 的向量
【发布时间】: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({...}))只能用于计算值,而不是副作用。

标签: r shiny


【解决方案1】:

为了简化这一点,只需将您的 input$code 直接与 if 语句一起使用,而不是 switch。例如:

if(input$code == 'ic9') {
query <- "SELECT icd_10_codes, description, flags FROM icd_9_10_dia WHERE icd_9_codes ='"
} else {
query <- "SELECT icd_9_codes, description, flags FROM icd_10_9_dia WHERE icd_10_codes ='"
}

您可以在函数中使用 input$code 或将其放入对 dbConn 的调用中(即 dbConn(input$code) )。我看不出“出”是从哪里来的。它在 dbConn 中定义,但您在调用 dbConn 时使用它,这将不起作用。此外,对响应式的调用应该是 inputCode() 但如果使用上面建议的 if 语句,则不需要它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多