【发布时间】: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后面必须跟数据框的名称,而不是函数调用。