gpt4 book ai didi

r - 使用操作按钮更新条件面板

转载 作者:行者123 更新时间:2023-12-05 05:18:00 24 4
gpt4 key购买 nike

我希望能够使用 actionButton 更改 R shiny 中的条件面板。通过阅读相关问题,我想到了以下示例。那行不通!但我不知道为什么。

应用代码:

ui = fluidPage(

conditionalPanel('output.CP_Flag == "1"', 'Condition met'),

conditionalPanel('output.CP_Flag == "2"', 'Special case: Flag == 2'),

conditionalPanel('output.CP_Flag != "1"', 'Condition not met'),

selectInput(inputId = 'Selection',
label = 'Select value, 1 meets the condition',
choices = 1:10),

actionButton(inputId = 'Change_Panel',
label = 'Change Panel')

)
server = function(input, output, session) {

CP_Flag = reactive({CP$Flag})
output$CP_Flag = renderText({CP_Flag()})
outputOptions(output, 'CP_Flag', suspendWhenHidden=FALSE)

observeEvent(input$Change_Panel, Fn_CP_Function(as.numeric(input$Selection)))

}

shinyApp(ui, server)

支持代码:

CP = new.env(parent = emptyenv())

CP$Flag = 2

Fn_CP_Function = function(i){
CP$Flag = i
}

这不是格式问题,例如数字与字符,或者引号数量不一致,因为在 R 本身中更改 CP$Flag 会产生我期望的结果。只是actionButton没有作用。

如果 (a) 任何关于为什么这不起作用的见解或 (b) 实现目标的代码片段:根据 actionButtons 的点击更新条件面板,我将不胜感激。

最佳答案

observeEvent 中,计算了一个新值,但未将其分配给任何反应变量。您必须将它分配给 reactiveVal() 并确保名为 CP_FlagrenderText 依赖于它。请注意,CP$Flag 本身不是 react 变量。因此,无论何时调用函数 Fn_CP_FunctionCP_Flag = reactive({CP$Flag}) 都不会更改 CP_Flag react 。

所以这应该可行:

CP = new.env(parent = emptyenv())
CP$Flag = 2
Fn_CP_Function = function(i){
CP$Flag = i
}

ui = fluidPage(

conditionalPanel('output.CP_Flag == "1"', 'Condition met'),

conditionalPanel('output.CP_Flag == "2"', 'Special case: Flag == 2'),

conditionalPanel('output.CP_Flag != "1"', 'Condition not met'),

selectInput(inputId = 'Selection',
label = 'Select value, 1 meets the condition',
choices = 1:10),

actionButton(inputId = 'Change_Panel',
label = 'Change Panel')

)
server = function(input, output, session) {

CP_Flag = reactiveVal(CP$Flag)
output$CP_Flag = renderText({CP_Flag()})
outputOptions(output, 'CP_Flag', suspendWhenHidden=FALSE)

observeEvent(input$Change_Panel, CP_Flag(Fn_CP_Function(as.numeric(input$Selection))))

}

shinyApp(ui, server)

此外,您可以使用更少的代码来完成此操作。您的代码可能是大型程序的一部分,并且您可能有正当理由创建新环境和单独的功能,但我认为无论如何分享它会很好,因为它可能有助于您的理解:

ui = fluidPage(

conditionalPanel('output.CP_Flag == "1"', 'Condition met'),
conditionalPanel('output.CP_Flag == "2"', 'Special case: Flag == 2'),
conditionalPanel('output.CP_Flag != "1"', 'Condition not met'),
selectInput(inputId = 'Selection',
label = 'Select value, 1 meets the condition',
choices = 1:10),

actionButton(inputId = 'Change_Panel',
label = 'Change Panel')

)
server = function(input, output, session) {

CP_Flag = reactiveVal(1)
observeEvent(input$Change_Panel, CP_Flag(input$Selection))
output$CP_Flag = renderText({CP_Flag()})
outputOptions(output, 'CP_Flag', suspendWhenHidden=FALSE)
}

shinyApp(ui, server)

关于r - 使用操作按钮更新条件面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400852/

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