在 R/Shiny 中获取本地文件数据

Posted

技术标签:

【中文标题】在 R/Shiny 中获取本地文件数据【英文标题】:Fetch local file data in R/Shiny 【发布时间】:2021-10-26 21:51:00 【问题描述】:

根据https://github.com/jpowell96/readFilesWithFetch/blob/master/index.html 的想法,我正在尝试从“www”文件夹中的 .csv 文件中读取数据,但我只得到“正在读取文件”行并且未显示数据。我也尝试在 fetch (fetch(file:///C:/.../www/this_data.csv')) 中使用完整路径,但得到了相同的结果。

任何想法让它工作? (目前在 Windows 中工作,但最终会将其移植到 shinyapps.io。)

非常感谢

  library(shiny)
  library(shinyjs)
  ui <- fluidPage(
    useShinyjs(),

      tags$div(
       tags$html("Reading file"),

       tags$script("
         fetch('./www/this_data.csv')
          .then(response => response.text()) 
          .then(csvString => 
         // Split the csv into rows
         const rows = csvString.split('\n');
         for (row of rows) 
           // Split the row into each of the comma separated values
           console.log(row.split(','));
         
       );
       ")
    )
  )
  server <- function(input, output, session) 
  shinyApp(ui, server)

这是 this_data.csv

Date,Open,High,Low,Close
1/2/2007,50.03978,50.11778,49.95041,50.11778
1/3/2007,50.2305,50.42188,50.2305,50.39767
1/4/2007,50.42096,50.42096,50.26414,50.33236
1/5/2007,50.37347,50.37347,50.22103,50.33459
1/6/2007,50.24433,50.24433,50.11121,50.18112
1/9/2007,49.99489,49.99489,49.80454,49.91333
1/10/2007,49.91228,50.13053,49.91228,49.97246
1/11/2007,49.88529,50.2391,49.88529,50.2391

【问题讨论】:

为什么你试图在客户端 javascript 中获取数据而不是在你的服务器函数中读取和解析它?你到底希望完成什么? 【参考方案1】:
    你需要将你的应用文件保存到app.R,就是这个名字。 在与应用文件相同的文件夹中,创建一个 www 文件夹并将您的 csv 添加到该 www 文件夹中。 当你从js中引用它时,去掉www前缀。 www 中的每条路径都是相对路径。例如你有一个www/myfile.txt,它就是myfile.txt,或者如果你有另一个子文件夹www/sub1/file2.csv,它就是sub2/file2.csv。 你需要使用HTML函数来包装和转义你的js代码,像&gt;这样的符号在HTML中有特殊的含义。 不需要shinyjs。

完整代码:

library(shiny)
ui <- fluidPage(
    tags$div(
        tags$html("Reading file"),
        tags$script(HTML("
         fetch('this_data.csv')
          .then(response => response.text())
          .then(csvString => 
         // Split the csv into rows
         const rows = csvString.split('\\n');
         for (row of rows) 
         // Split the row into each of the comma separated values
           console.log(row.split(','));
         
       );
       "))
    )
)
server <- function(input, output, session) 
shinyApp(ui, server)

如果你做了所有这些,你会看到:

【讨论】:

谢谢@Iz100,但“读取文件”后没有显示任何内容。关于版本,我有最新的闪亮 (1.6.0) 和 RStudio (1.4.1717)。其余:平台:x86_64-w64-mingw32,arch:x86_64,os:mingw32,system:x86_64,mingw32,major:4,minor:0.4,year:2021,month:02,day:15,svn rev:80002, version.string: R 版本 4.0.4 (2021-02-15) 您的代码不是为了显示文件而编写的,而只是为了加载文件。 console.log 仅在 js 控制台中打印结果,就像您在 R 中使用 print 一样。UI 上不会显示任何内容。如果需要显示表格,则需要编写下游代码。这与您在此处提出的问题无关。 明白。谢谢。 真诚地,我以为内容会显示出来。我是否需要创建一个新问题才能知道如何显示内容? 是的,最好在不同的帖子中提问。

以上是关于在 R/Shiny 中获取本地文件数据的主要内容,如果未能解决你的问题,请参考以下文章

尝试在本地浏览器中查看时,Docker R Shiny app 0.0.0.0 拒绝连接

如何知道(或指定)R shiny 使用的 localhost 端口(在本地运行时)

R Shiny:使用来自反应函数的数据制作反应图

创建可以输出多种文件类型R Shiny的downloadButton

R Shiny 加速数据加载

导入文件并附加到 r shiny 中先前加载的文件