【问题标题】:R shiny dashboard Plot interactive data subquery errorR闪亮的仪表板绘制交互式数据子查询错误
【发布时间】:2021-06-06 22:54:18
【问题描述】:

我在尝试在 Shiny 中生成绘图之前添加数据集的子查询时收到错误消息。我使用 sqldf 从 UI 中滑块输入的动态输入中对数据集进行子集化。 下面列出了错误消息。不知道会发生什么。

'警告:错误:在“[[input$namesn_chg]”附近:语法错误 [没有可用的堆栈跟踪]'

应用中的布局:

UI.R:

tabPanel(title = "Spaghetti",
                                actionButton("spaghetti_update", "Update Filtered Dataset"),

                                selectInput("namesn_chg", "Select PCHG Variable", choices = "Import Dataset to Begin"),
                                sliderInput("spaghetti_slider", "More than % of Increase/Decrease:", -100, 100, 60),
                                actionButton("spaghetti_render", "Render Plot")

服务器.R:

  filtered_dataset_spaghetti <- reactiveVal()
  
  observeEvent(input$spaghetti_update,{
    if(is.null(filter_tbl_cols()$Variable)){return(NULL)}
    dat <- dataset()
    filter_cols <- filter_tbl_cols()$Variable
    filtered_dataset_spaghetti(dat[filter_rows(), ..filter_cols])
    output$spaghetti_uploaded <- renderText({paste0("UPDATED")})
    output$spaghetti_uploaded_vars <- renderText({paste0("Filtered Dataset contains ", filtered_dataset_spaghetti()[,.N], " Observations and ", length(names(filtered_dataset_spaghetti())), " Variables")})
  })
  
  observeEvent(input$spaghetti_update, {
    if(is.null(dataset())){return(NULL)}
    filtered_varlist_all <- names(filtered_dataset_spaghetti())
    updateSelectInput(session, "spaghetti_x", choices = sort(filtered_varlist_all))
    updateSelectInput(session, "spaghetti_y", choices = sort(filtered_varlist_all))
    updateSelectInput(session, "spaghetti_by", label = "Select Group By Variable", choices = c("NA", sort(filtered_varlist_all)))
    updateSelectInput(session, "spaghetti_sort", label = "Sort x-axis Variable By:", choices = sort(filtered_varlist_all), selected = input$spaghetti_x)
    updateSelectInput(session, "namesn_chg", label = "Select PCHG Variable", choices = sort(c(varlistn(), varlistdt())))
  })

  observeEvent(input$spaghetti_render,{
    if(is.null(dataset()) | is.null(input$spaghetti_sort)){return(NULL)}
    if(input$spaghetti_by == "NA"){
      spaghetti_by <- "NA"
    }else{#Transforming x-axis variable into factor, grouped by a sort key. This tells ggplot2 to 'order by' the factor variable. The below process is necessary since we cannot assign '<-' to a function, in this case filtered_dataset_box().
      sort_dat <- filtered_dataset_spaghetti()
      #Add slide input for chg_pre
      sort_dat <- sqldf("select *
            from filtered_dataset_spaghetti()
            where SUBJID in (
            select SUBJID   
            from filtered_dataset_spaghetti() where filtered_dataset_spaghetti()[[input$namesn_chg]]>input$spaghetti_slider
            )"
      )
      
      sort_key <- input$spaghetti_sort
      sort_dat[[input$spaghetti_x]] <- factor(sort_dat[[input$spaghetti_x]], levels = unique(sort_dat[order(sort_dat[, ..sort_key])][[input$spaghetti_x]]))
      filtered_dataset_spaghetti(sort_dat)
      
      spaghetti_by <- filtered_dataset_spaghetti()[[input$spaghetti_by]]
    }

【问题讨论】:

  • [[input$namesn_chg] 中缺少一个括号? [[input$namesn_chg]] intead.
  • @jpdugo17,如你在代码中看到的,它是'[[input$namesn_chg]]',代码中只有一个'[[input$namesn_chg]]'。
  • 反应式表达dataset()的内容是什么?
  • @jpdugo17,它是一种带有动态过滤器的数据帧格式。
  • 在sql语句中from filtered_dataset_spaghetti()是无效的语法。 from 后面必须跟数据框的名称,而不是函数调用。

标签: r shiny


【解决方案1】:

你可以试试这个dplyr 代码而不是sqldf 吗?

sort_dat <- sort_dat %>%
  filter(SUBJID %in% SUBJID[.data[[input$namesn_chg]] > input$spaghetti_slider])

【讨论】:

    猜你喜欢
    • 2019-05-20
    • 2018-12-24
    • 1970-01-01
    • 2012-12-07
    • 2019-02-23
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多