gpt4 book ai didi

r - 使用 Shiny fileInput 仅获取路径

转载 作者:行者123 更新时间:2023-12-04 15:30:01 25 4
gpt4 key购买 nike

我有一个非常大的固定宽度文件,需要使用我的 Shiny 应用程序读取。我的程序目前的结构方式是 ui.R 包含一个 fileInput 允许用户使用浏览器定位文件。

在服务器端,我只捕获文件的路径,如下所示:

path2file <- reactive({
infile <- input$path2file
if (is.null(infile)) return(NULL)
infile$datapath
})

随后的函数将该路径作为输入,并根据其布局规范继续读入文件。这一切都很好;然而,当处理非常大的 fwf 文件时,我的程序会大大减慢,并且需要几个小时才能使用 fileInput 读取文件的路径名

我怀疑 fileInput 实际上正在读取整个文件,然后我的函数只返回数据路径,即使我没有在函数中明确读取任何文件格式类型。

我的目标是继续使用我现在已经构建的程序,并使用我的 fileInput 仅获取该文件的路径。我在 SO 上找到了这个主题,并认为这是一个可能的选择。

Getting file path from Shiny UI (Not just directory) using browse button without uploading the file

但是,我的目标是最小化我拥有的包依赖项的数量;这已经成为一个大问题,所以如果我必须使用额外的包,我会,但我想不惜一切代价避免这种情况。

我尝试了这个便宜的技巧:
path2file <- reactive({
infile <- input$path2file
if (is.null(infile)) return(NULL)
scan(infile$datapath, n = 1)
infile$datapath
})

认为这将是一个快速的解决方法,但它也非常慢,所以我怀疑它也不是只读取 n = 1。所以,我的问题是任何人都可以确定一种使用 fileInput 的方法来允许用户定位文件并让服务器端功能仅捕获路径而不读取文件或尝试以任何方式解析它?更重要的是,这是否可以单独使用 base R 和 Shiny 中的函数来完成,而不必从其他扩展包中获取函数?

以上是server.R文件中的相关代码部分,ui.R文件中的相关代码部分是
fileInput('path2dor', 'Choose the DOR .txt file to format',
accept=c('text/csv',
'text/comma-separated-values,text/plain', '.csv')),

谢谢你的建议。

最佳答案

fileInput 无法使用此功能.原因是“fileInput”出于安全原因不向服务器提供本地路径信息。
fileInput用户在他的本地机器上浏览浏览器,服务器端的结果文件是一次所选本地的上传副本。

作为替代方案,您可以使用 shinyFiles包,它确实在服务器端导航。这意味着,您可以获得本地计算机上的所有路径。

第二种选择可能是简单的文本输入,它让用户手动添加路径(确保检查服务器端的路径以免遇到任何问题)。

关于r - 使用 Shiny fileInput 仅获取路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46118367/

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