2015-11-16 107 views
4

我想在我的shinyApp中使用shinyFiles库,以便为用户提供选择一组文件或目录的可能性。 我的想法是使用根据复选框选择而改变的uiOutput。shinyfiles和renderUI不能正常工作

在这里,我报告的代码,也许是比文字更explicative

UtilityUI <- fluidPage(
    titlePanel("page1"), 
    fluidRow(
    column(2, 
     wellPanel(
       tags$p("Check the box below if you want to choose an entire directory"), 
       checkboxInput(inputId = 'directory_flag', label = 'Directory path?', value = FALSE), 
       uiOutput("input_selection_ui") 
      ) 
    ), 
    column(8 
      #... 
      ) 
) 
) 

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

    output$input_selection_ui <- renderUI({ 
    if(input$directory_flag == TRUE) { 
     shinyDirButton(id = "infiles", label = "Choose directory", title = "Choose a directory") 
    } else { 
     shinyFilesButton(id = "infiles", label = "Choose file(s)", title = "Choose one or more files", multiple = TRUE) 
    } 
    }) 


    shinyFileChoose(input, 'infiles', roots=getVolumes(), session=session, restrictions=system.file(package='base')) 
    shinyDirChoose(input, 'infiles', roots=getVolumes(), session=session, restrictions=system.file(package='base')) 
} 

shinyApp(UtilityUI, UtilityServer) 

按下“shinyFiles”按钮,当问题新生儿:弹出窗口不加载根,在这两种情况下( shinyDirButton和shinyFilesButton)。

如果我不使用uiOutput功能一切正常。但在这种情况下,我不能改变我的UI dinamically ...

非常感谢您的答复,

Inzirio

回答

1

看来我无法与renderUI()一起工作。相反,我使用conditionalPanel()实现了相同的行为来显示替代按钮。这似乎工作。以下是代码:

ui <- shinyUI(fluidPage(
    checkboxInput(
    inputId = 'directory_flag', 
    label = 'Directory path?', 
    value = FALSE 
), 

    conditionalPanel(
    "input.directory_flag == 0", 
    shinyFilesButton(
     id = "infile", 
     label = "Choose file(s)", 
     title = "Choose one or more files", 
     multiple = TRUE 
    ) 
), 
    conditionalPanel(
    "input.directory_flag == 1", 
    shinyDirButton(id = "indir", label = "Choose directory", title = "Choose a directory") 
) 
)) 

server <- shinyServer(function(input, output, session) { 
    shinyFileChoose(
    input, 
    'infile', 
    roots = getVolumes(), 
    session = session, 
    restrictions = system.file(package = 'base') 
) 
    shinyDirChoose(
    input, 
    'indir', 
    roots = getVolumes(), 
    session = session, 
    restrictions = system.file(package = 'base') 
) 
}) 

shinyApp(ui, server) 
+0

此实施如果已部署,则只允许访问服务器文件系统。我想知道是否有办法启用访问客户端文件系统? – Sasha

+0

@inzirio没有解决方案?谢谢 – DemetriusRPaula

+0

@ddiez没有解决方案?谢谢 – DemetriusRPaula