gpt4 book ai didi

r - 条件面板未按预期显示,但出现警告消息

转载 作者:行者123 更新时间:2023-12-03 17:33:41 26 4
gpt4 key购买 nike

我有一个带有取决于一系列用户选择的条件面板的应用程序。提供可重现的示例太复杂了,但我会尝试提供一个简化版本来获得我所要求的内容,并包括来自实际应用程序的相关部分。

在我的应用程序中,如果用户加载 Excel 文件然后从单选按钮中选择另一个条件,则会出现某个条件面板。如果加载了 Excel 文件并进行了适当的选择,则给定的条件面板将按预期显示。如果加载了 csv 文件,则条件面板不会出现,但应该在 object sheetrID not found 的位置周围有一条红色消息.该错误(实际上是 Shiny 中的警告)纯粹是装饰性的,但我想了解为什么会发生这种情况。

作为解决此问题的一种方法,在这个简单的应用程序的条件面板上获取类似错误消息的方法是什么:

library(shiny)

ui <- fluidPage(

column(3,
h3("Add new data"),
uiOutput("dummyslider")
), # close column

column(9,
h3("Matching"),
uiOutput("condition_select")
) # close column

) # close fluidPage


server <- function(input, output, session) {

output$dummyslider <- renderUI({
sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100)
})

output$condition_select <- shiny::renderUI({
shiny::conditionalPanel(
condition="input.num > 40",
shiny::sliderInput(
inputId="slider2",
label="test label",
min=0,
max=1,
value=0.1,
step=0.01
)
)
})

} # close server

shinyApp(ui = ui, server = server)

编辑:
作为对@Pork Chop 建议的回应——目前还不清楚我将在哪里插入 req陈述。条件面板依赖 input$method_cat 为“两者”才能显示面板。我插入了验证 input$method_cat 不是工作表的打印语句,并且还验证了 getExtension 是“csv”:
output$condition_cat_both <- shiny::renderUI({
print(input$method_cat)
print(getExtension())
shiny::conditionalPanel(
condition="input.method_cat == 'both'",
shinyWidgets::pickerInput(
inputId="cat_vars_selected_both",
label="Select variables you wish to be categorical:",
choices=smartSelectionCatVars(importDataSet(), importCatVarLookup()),
multiple=TRUE,
options = list(`actions-box` = TRUE)
), # close pickerInput
) # close conditionalPanel

method_cat 是单选按钮的输出:
output$select_method_cat <- shiny::renderUI({
shinyWidgets::awesomeRadio(
inputId="method_cat",
label="Select the method to treat categorical variables:",
choices=getMethodCatOptions(),
selected="thresh"
)
}) # close renderUI

仅当加载的文件是 Excel 时,getMethodCatOptions 才会返回 'both' 作为单选按钮选项之一:
getMethodCatOptions <- shiny::reactive({
req(input$variable_relations)
req(input$cat_var_lookup)
if(getExtension() == "xlsx" && input$variable_relations == "Yes" &&
input$cat_var_lookup == "Yes") {
return(c("Threshold"="thresh", "Select Variables Specifically"="pick",
"Use categorical variable lookup"="sheet",
"Select both"="both"))
}
return(c("Threshold"="thresh", "Select Variables Specifically"="pick"))
}) # close reactive

因此,不清楚我将在哪里插入 req 语句,因为根据定义,条件面板仅应在输入文件是 Excel 时出现(因为这是触发“工作表”作为 radio 选项之一输出的唯一内容按钮)。

更新:
我意识到这个所谓的错误消息实际上是 Shiny 中的警告:`警告:匹配错误:找不到对象'sheetrId'

我可以抑制警告,从而消除问题,但我宁愿理解为什么会这样。难道是因为条件面板在 renderUI 函数中?

再说一次,我的玩具例子有同样的情况,那个条件面板没有问题......

最佳答案

为了演示我上面的评论,这里是您的示例应用程序的改编版本,它会产生相同的错误消息。但是,正如我所提到的,该错误与您的应用程序无关,而是使用 openxlsx::loadWorkbook() 的结果。 .

在此示例中,一旦您将 slider 移动到 40 并成功上传文件,条件面板就会打开。如果您使用 openxlsx::loadWorkbook()要尝试访问 .csv,您会收到您描述的错误(不是成功上传)并且面板不会打开。您可以切换到read.csv()以避免错误并打开面板。

在您的情况下,如果您不希望在用户尝试上传 .csv 文件时打开面板,则包含 validate() 可能更有指导意义。函数告诉用户上传 Excel 文件而不是 .csv。

更新的用户界面:

library(shiny)

ui <- fluidPage(
column(3,
h3("Add new data"),
uiOutput("dummyslider")
), # close column
column(3,
h3("Matching"),
uiOutput("condition_select")
), # close column
column(3,
h3("Table/error"),
tableOutput("tbl")
)
) # close fluidPage

更新服务器:
server <- function(input, output, session) {
output$dummyslider <- renderUI({
tagList(
sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
fileInput("upl", label = "Upload any .csv file:")
)
})
output$condition_select <- shiny::renderUI({
shiny::conditionalPanel(
condition="input.num > 40 & output.uploaded",
shiny::sliderInput(
inputId="slider2",
label="test label",
min=0,
max=1,
value=0.1,
step=0.01
)
)
})
data <- reactive({
uplFile <- input$upl
if (is.null(uplFile))
return(NULL)
#tbl <- read.csv(uplFile$datapath)
tbl <- openxlsx::loadWorkbook(file=as.character(uplFile$datapath))
return(tbl)
})
output$uploaded <- reactive({ return( !is.null(data()) ) })
outputOptions(output, "uploaded", suspendWhenHidden=FALSE)
output$tbl <- renderTable ({
if (is.null(data())) return()
head(data.frame(read.xlsx(data())),10)
})
}

shinyApp(ui, server)

关于r - 条件面板未按预期显示,但出现警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50053936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com