标签:shiny javascript r
我有2个列表,每个列表包含以另一个变量d为条件的多个ID p_id.
d1 <- as.list(unique(df$p_id[df$d==1]))
d2 <- as.list(unique(df$p_id[df$d==2]))
我想在我闪亮的应用程序中添加一个conditionalPanel来相应地显示/隐藏selectInputwidget.
在我的UIdashboardPage,dashboardBody中,我具有以下内容:
box(
conditionalPanel(
condition = "input.p_id.indexOf('d1')!=-1"
, selectInput(
inputId = "d_number"
,label = "Select Day:"
,choices = list("Day 1" = "1")
,selected = "1"
)
),
conditionalPanel(
condition = "input.p_id.indexOf('d2')!=-1"
, selectInput(
inputId = "d_number"
,label = "Select Day:"
,choices = list("Day 1" = "1", "Day 2" = "2")
,selected = "1"
)
)
),
我的理解是条件必须在js中而不是r中.例如,我正在尝试为第一个条件复制p_id%in%d1.但是,这不起作用.
我尝试过condition =“ input.p_id.indexOf(d1)!=-1”,但它也无法正常工作.
任何人都可以建议我要实现的正确的js语法是什么?谢谢!
解决方法:
我认为您可以以更简单的方式实现所需的功能,而无需使用conditionalPanels.我们可以生成一次selectInput,然后在其他输入发生更改时使用updateSelectInput对其进行更新.这是一个工作示例:
library(shiny)
ui = fluidPage(
selectInput('maxdays','Max number of days:', c(1,2,3)),
selectInput('days','Days:',c(1))
)
server = function(input, output, session) {
observe({
updateSelectInput(session,'days',choices=seq(1,input$maxdays))
})
}
runApp(shinyApp(ui = ui, server = server))
另一种解决方案是,每当第一个selectInput更改时,使用renderUI重新渲染selectInput:
library(shiny)
ui = fluidPage(
selectInput('maxdays','Max number of days:', c(1,2,3)),
uiOutput('uiDays')
)
server = function(input, output, session) {
output$uiDays <- renderUI({
selectInput('days','Days:', choices=seq(1,input$maxdays))
})
}
runApp(shinyApp(ui = ui, server = server))
希望这可以帮助!
标签:shiny,javascript,r 来源: https://codeday.me/bug/20191025/1928087.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。