单击actionButton时重新加载fileInput

时间:2019-07-18 15:29:21

标签: r shiny

我编写了一个Shiny应用,该应用将多个用户定义的csv文件作为fileInput加载。该应用程序旨在绘制来自正在运行的测量的数据,新数据点大约每五分钟写入一次输入文件。我希望能够通过单击actionButton重新加载所有输入。

我试图将读取.csv的函数定义为eventReactive

library(shiny)

ui <- fluidPage(
  actionButton(inputId = "update", label = "Reload input files"),
  fileInput(inputId = "file", label = "Choose file"),
  textOutput("test")
)

server <- function(input, output) {
  data <- eventReactive(input$update, {
    mydata <- read.delim(input$file$datapath)
    return(nrow(mydata))
    })
  output$test <- renderText(print(data()))
}

shinyApp(ui = ui, server = server)

当我选择一个输入文件并单击操作按钮时,输出将正确呈现。如果现在打开csv文件,添加其他行并再次单击操作按钮,则输出不会更新。

1 个答案:

答案 0 :(得分:0)

基于this answer,我能够为您解决问题。 正如我在上面的评论中所指出的那样,无法使用操作按钮更新fileInput的原因显然是,fileInput在临时目录中创建了一个临时文件,而{{1 }}链接到此临时文件。因此,您可以随时使用操作按钮重新加载文件,因为链接指向的是临时文件,因此不会反映对原始文件的更改。我真的不知道为什么Input$file$datapth与临时文件一起工作,但是使用inputFile包,您可以构建一个解决方法。您有一个按钮可以获取到文件的真实链接并加载数据,而另一个按钮可以重新加载数据。按下加载按钮将重新加载原始数据,并且所有更改都会反映出来。

shinyFiles