在Shiny应用程序(R)中进行交互式目录输入

萨沙

我正在构建一个闪亮的应用程序,它要求用户在本地计算机上选择一个文件夹,其中包含要由该应用程序处理的文件。

我正在使用这里提出的解决方案这在本地计算机上可以正常工作,但是如果将应用程序部署到Shinyapps服务器上则无法正常工作。该解决方案的作者确认,该解决方案仅设计用于本地的Shiny应用程序,因为它进行OS Shell调用以显示目录对话框。

我想知道是否存在用于目录对话框的其他解决方案,该解决方案将在已部署的Shiny应用程序上正常工作(我正在部署到Shinyapps.io)。

编辑:请注意,由于以下两个原因,我无法使用fileInput接口:

  1. 该应用程序的用户不是技术人员,他们不知道该应用程序使用该文件夹中的哪些文件。
  2. 所选文件夹可能包含所需文件所在的其他文件夹,因此即使fileInput接口multiple启用了该选项,也无法一次选择所有文件

文件夹/文件结构不是我可以更改的东西,它是从医疗设备中按原样下载的,因此,我唯一希望用户指望的是指定父文件夹,其余应在R代码中完成。

瓦尔特·贝科维奇

这是一个基于使用“ webkitdirectory”属性的工作示例。目前,Chrome,Opera和Safari(移动和台式机)支持该属性,9月发布的Firefox 49应该支持该属性。在这里了解更多它也可与子目录一起使用。

它需要在ui.R中使用tags关键字。我已经通过上传三个csv文件进行了测试,每个文件包含三个用逗号分隔的数字。在Chrome和Opera上进行了本地测试,并在Shinyapps.io上进行了测试。这是代码:

用户界面

    library(shiny)
    library(DT)

    shinyUI(tagList(fluidPage(theme = "bootstrap.css",
                      includeScript("./www/text.js"),
                      titlePanel("Folder content upload"),

                      fluidRow(
                              column(4,
                                     wellPanel(
                                             tags$div(class="form-group shiny-input-container", 
                                                      tags$div(tags$label("File input")),
                                                      tags$div(tags$label("Choose folder", class="btn btn-primary",
                                                                          tags$input(id = "fileIn", webkitdirectory = TRUE, type = "file", style="display: none;", onchange="pressed()"))),
                                                      tags$label("No folder choosen", id = "noFile"),
                                                      tags$div(id="fileIn_progress", class="progress progress-striped active shiny-file-input-progress",
                                                               tags$div(class="progress-bar")
                                                      )     
                                             ),
                                             verbatimTextOutput("results")
                                     )
                              ),
                              column(8,
                                     tabsetPanel(
                                             tabPanel("Files table", dataTableOutput("tbl")),
                                             tabPanel("Files list", dataTableOutput("tbl2"))
                                     )
                              )
                      )
    ),
    HTML("<script type='text/javascript' src='getFolders.js'></script>")
    )

    )          

服务器

    library(shiny)
    library(ggplot2)
    library(DT)

    shinyServer(function(input, output, session) {
            df <- reactive({
                    inFiles <- input$fileIn
                    df <- data.frame()
                    if (is.null(inFiles))
                            return(NULL)
                    for (i in seq_along(inFiles$datapath)) {
                            tmp <- read.csv(inFiles$datapath[i], header = FALSE)  
                            df <- rbind(df, tmp)
                    }
                    df

            })
            output$tbl <- DT::renderDataTable(
                    df()
            )
            output$tbl2 <- DT::renderDataTable(
                    input$fileIn
            )
            output$results = renderPrint({
                    input$mydata
            })

    })

text.js

window.pressed = function(){
        var a = document.getElementById('fileIn');
        if(a.value === "")
        {
            noFile.innerHTML = "No folder choosen";
        }
        else
        {
            noFile.innerHTML = "";
        }
    };

getFolders.js

     document.getElementById("fileIn").addEventListener("change", function(e) {

            let files = e.target.files;
            var arr = new Array(files.length*2);
            for (let i=0; i<files.length; i++) {

            //console.log(files[i].webkitRelativePath);
            //console.log(files[i].name);
            arr[i] = files[i].webkitRelativePath;
            arr[i+files.length] = files[i].name;


            }

            Shiny.onInputChange("mydata", arr);

    });

让我知道是否有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在球拍中进行交互式输入循环?

来自分类Dev

使用Symfony \ Console进行交互式php cli应用程序

来自分类Dev

F#交互式应用程序是开源的吗?

来自分类Dev

交互式终端应用程序的构建块

来自分类Dev

创建复杂的交互式Web应用程序

来自分类Dev

在交互式R会话中从闪亮的应用程序返回值

来自分类Dev

R Shiny中的交互式ZoomGraph

来自分类Dev

如何在iOS 8应用中进行交互式通知?

来自分类Dev

如何在iOS 8应用中进行交互式通知?

来自分类Dev

Shiny:绘制名称包含交互式输入值的图形

来自分类Dev

如何用黄瓜存根和模拟交互式红宝石应用程序?

来自分类Dev

启动一个非交互式的基于Spring-Shell的应用程序

来自分类Dev

Docker容器中的交互式命令行应用程序

来自分类Dev

如何为c ++ OpenCV应用程序创建简单的交互式GUI?

来自分类Dev

在非交互式应用程序中处理150GB堆

来自分类Dev

从交互式Jupyter Notebook创建Web应用程序的最简单方法是什么?

来自分类Dev

交互式MapIcon,Windows Phone 8.1通用应用程序

来自分类Dev

交互式UNIX应用程序识别终端更改是否很常见?

来自分类Dev

是否可以在SSRS之上构建完全交互式的Web应用程序?

来自分类Dev

如何在Python中自动执行交互式控制台应用程序?

来自分类Dev

Windows 服务与交互式应用程序中的 GDI 句柄

来自分类Dev

交互式散景应用程序中的 Widgets.py

来自分类Dev

交互式消息按钮未更新 Web 应用程序

来自分类Dev

如何将 Datashader-Bokeh 交互式地图作为 Web 应用程序托管?

来自分类Dev

将交互式消息气泡移动到应用程序区域

来自分类Dev

如何从 C# 运行交互式 RPG 应用程序?

来自分类Dev

通过 SCCM 在 SYSTEM 会话中运行的交互式应用程序

来自分类Dev

R Shiny:以交互方式修改应用程序主题

来自分类Dev

R Shiny:以交互方式修改应用程序主题

Related 相关文章

  1. 1

    如何在球拍中进行交互式输入循环?

  2. 2

    使用Symfony \ Console进行交互式php cli应用程序

  3. 3

    F#交互式应用程序是开源的吗?

  4. 4

    交互式终端应用程序的构建块

  5. 5

    创建复杂的交互式Web应用程序

  6. 6

    在交互式R会话中从闪亮的应用程序返回值

  7. 7

    R Shiny中的交互式ZoomGraph

  8. 8

    如何在iOS 8应用中进行交互式通知?

  9. 9

    如何在iOS 8应用中进行交互式通知?

  10. 10

    Shiny:绘制名称包含交互式输入值的图形

  11. 11

    如何用黄瓜存根和模拟交互式红宝石应用程序?

  12. 12

    启动一个非交互式的基于Spring-Shell的应用程序

  13. 13

    Docker容器中的交互式命令行应用程序

  14. 14

    如何为c ++ OpenCV应用程序创建简单的交互式GUI?

  15. 15

    在非交互式应用程序中处理150GB堆

  16. 16

    从交互式Jupyter Notebook创建Web应用程序的最简单方法是什么?

  17. 17

    交互式MapIcon,Windows Phone 8.1通用应用程序

  18. 18

    交互式UNIX应用程序识别终端更改是否很常见?

  19. 19

    是否可以在SSRS之上构建完全交互式的Web应用程序?

  20. 20

    如何在Python中自动执行交互式控制台应用程序?

  21. 21

    Windows 服务与交互式应用程序中的 GDI 句柄

  22. 22

    交互式散景应用程序中的 Widgets.py

  23. 23

    交互式消息按钮未更新 Web 应用程序

  24. 24

    如何将 Datashader-Bokeh 交互式地图作为 Web 应用程序托管?

  25. 25

    将交互式消息气泡移动到应用程序区域

  26. 26

    如何从 C# 运行交互式 RPG 应用程序?

  27. 27

    通过 SCCM 在 SYSTEM 会话中运行的交互式应用程序

  28. 28

    R Shiny:以交互方式修改应用程序主题

  29. 29

    R Shiny:以交互方式修改应用程序主题

热门标签

归档