我编写了一个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文件,添加其他行并再次单击操作按钮,则输出不会更新。
答案 0 :(得分:0)
基于this answer,我能够为您解决问题。
正如我在上面的评论中所指出的那样,无法使用操作按钮更新fileInput
的原因显然是,fileInput
在临时目录中创建了一个临时文件,而{{1 }}链接到此临时文件。因此,您可以随时使用操作按钮重新加载文件,因为链接指向的是临时文件,因此不会反映对原始文件的更改。我真的不知道为什么Input$file$datapth
与临时文件一起工作,但是使用inputFile
包,您可以构建一个解决方法。您有一个按钮可以获取到文件的真实链接并加载数据,而另一个按钮可以重新加载数据。按下加载按钮将重新加载原始数据,并且所有更改都会反映出来。
shinyFiles