Adr*_*enW 5 r file shiny shinydashboard
我正在使用R中的应用程序,用户需要使用RShiny fileInput
按钮从计算机中选择文件.我想修改它,以便程序可以自动分配关联变量(即可以加载文件),而无需用户单击按钮并选择文件.
我面临的问题是a fileInput
有4个字段,其中我只能知道3.例如,当我通过正常程序将文件加载hello.csv
到变量中时inFile
,这是我得到的:
inFile$name = hello.csv
inFile$size = 8320
inFile$type = text/csv
inFile$datapath = C:\\Users\\MyName\\AppData\\Local\\Temp\\Rtmpkh8Zcb/7d5f0ff0111d440c7a66b656/0
Run Code Online (Sandbox Code Playgroud)
虽然我可以猜到第二个和第三个知道文件,但我不知道该datapath
字段是如何分配的......
我试图将其声明inFile
为一个NULL
全局变量,然后逐个分配不同的字段,但我坚持使用最后一个.还有其他方法可以做,比如模仿用户点击文件输入按钮并选择指定文件的行为的函数吗?
非常感谢你.
如果您要做的只是最初加载文件,则不必依赖Shiny函数来执行此操作.你可以依靠R函数.像这样设置您的应用:
ui <- shinyUI(
fileInput("inFile", label="Choose a file", multiple=F)
)
server <- shinyServer(function(input, output, session) {
values <- reactiveValues()
dat <- reactive({
if (is.null(inFile$datapath)) {
dat <- read.csv("path/to/your.csv")
values$file_name = "your.csv"
values$file_type = "csv"
values$file_size = file.size("path/to/your.csv")
values$file_path = "path/to/your.csv"
} else {
dat <- read.csv(inFile$datapath)
values$file_name = inFile$name
values$file_size = inFile$size
values$file_type = inFile$type
values$file_path = inFile$datapath
}
})
})
shinyApp(ui=ui, server=server)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,闪亮的应用程序将启动,并看到inFile$datapath
是NULL
,将载入您所选择的预定义的文件.在inFile
更改之前它不会再次运行,此时它将加载用户指向的文件.
希望有所帮助.
我将上面的代码更改为用于reactiveValues
存储需要在整个应用程序中使用的信息.如果您只是设置它们然后执行查找/替换input$inFile$datapath
并替换它values$file_path
,您的代码应该可以正常工作.
我是这样想出来的:
我编辑了原始代码,以便所有代码都read.csv(...)
被替换为对data.frame
全局变量的调用。我还添加了一个小按钮,您需要单击该按钮才能继续。此按钮保存您刚刚在数据库中加载的内容(如果您选择带有 的文件fileInput
),并将正确的值分配给以下操作所需的全局变量。如果您根本没有选择任何文件,它将直接从数据库中找到的数据分配变量。
所以我没有找到解决问题的正确方法,但这是一个可以在我的情况下完成工作的解决方法。
@brittenb我无法让你的反应式解决方案按照我想要的方式工作,这就是为什么我最终以另一种方式这样做。不过还是谢谢你花时间考虑一下。
我仍然愿意接受有关如何在fileInput
没有用户交互的情况下更新文件的建议。
归档时间: |
|
查看次数: |
2250 次 |
最近记录: |