如何使用 shinyFileChoose 创建一个反应对象来加载 data.frame
how to use shinyFileChoose to create an reactive object to load a data.frame
我一直在我闪亮的应用程序中使用 fileInput
来上传文件,然后创建一个反应对象,允许我读取 data.frame 并执行其他操作,例如子集化或过滤。但是,我需要获取文件的绝对路径以进行另一次计算,而且 fileUpload
似乎只存储了一个临时路径。
这是工作的服务器部分
server = function(input, output) {
options(shiny.maxRequestSize=100*1024^2)
contents <- reactive({
inputFile <- input$fileUpload
if (is.null(inputFile))
return()
read.delim(inputFile$datapath, header = TRUE)
})
# Return filename as another object
file_name <- reactive({
inFile <- input$fileUpload
if (is.null(inFile))
return()
else { print(inFile$name); return(tools::file_path_sans_ext(inFile$name))}
})
output$tabla <- DT::renderDataTable({
if(is.null(contents()))
return()
DT::datatable(contents(),
filter = 'top')
})
但是,我想使用 shinyFiles
选项,因为它存储了真实路径,我将需要该路径来加载更多文件
我已经尝试在服务器中使用这部分代码来模仿 fileUpload
相同的行为,但它不起作用
server = function(input, output, session) {
volumes = getVolumes()
volumes <- c(Home = fs::path_home(), "R Installation" = R.home(), getVolumes()())
file_selected <- reactive({
shinyFileChoose(input, "file", roots = volumes, session = session)
return(parseFilePaths(volumes, input$file))
})
contents <- reactive({
if (is.null(file_selected()))
return()
read.delim(file_selected(), header = TRUE)
})
# Reactive function creating the DT output object
output$tabla <- DT::renderDataTable({
if(is.null(contents()))
return()
DT::datatable(contents(),
filter = 'top')
})
我收到关于 file
必须是字符串或连接的错误,如果我使用 read.delim(as.character(file_selected()), header = TRUE)
那么错误是关于 "description" 参数无效
有多种可能的错误原因。请尝试以下步骤:
- 在解析文件路径之前使用
req(input$file)
- 在解析文件路径之前检查
input$file
是否为 NULL
- Return
$datapath
的 parseFilePaths
函数。
据此,您的代码应如下所示:
file_selected <- reactive({
shinyFileChoose(input, "file", roots = volumes, session = session)
req(input$file)
if (is.null(input$file))
return(NULL)
return(parseFilePaths(volumes, input$file)$datapath)
})
希望对你有用。
我一直在我闪亮的应用程序中使用 fileInput
来上传文件,然后创建一个反应对象,允许我读取 data.frame 并执行其他操作,例如子集化或过滤。但是,我需要获取文件的绝对路径以进行另一次计算,而且 fileUpload
似乎只存储了一个临时路径。
这是工作的服务器部分
server = function(input, output) {
options(shiny.maxRequestSize=100*1024^2)
contents <- reactive({
inputFile <- input$fileUpload
if (is.null(inputFile))
return()
read.delim(inputFile$datapath, header = TRUE)
})
# Return filename as another object
file_name <- reactive({
inFile <- input$fileUpload
if (is.null(inFile))
return()
else { print(inFile$name); return(tools::file_path_sans_ext(inFile$name))}
})
output$tabla <- DT::renderDataTable({
if(is.null(contents()))
return()
DT::datatable(contents(),
filter = 'top')
})
但是,我想使用 shinyFiles
选项,因为它存储了真实路径,我将需要该路径来加载更多文件
我已经尝试在服务器中使用这部分代码来模仿 fileUpload
相同的行为,但它不起作用
server = function(input, output, session) {
volumes = getVolumes()
volumes <- c(Home = fs::path_home(), "R Installation" = R.home(), getVolumes()())
file_selected <- reactive({
shinyFileChoose(input, "file", roots = volumes, session = session)
return(parseFilePaths(volumes, input$file))
})
contents <- reactive({
if (is.null(file_selected()))
return()
read.delim(file_selected(), header = TRUE)
})
# Reactive function creating the DT output object
output$tabla <- DT::renderDataTable({
if(is.null(contents()))
return()
DT::datatable(contents(),
filter = 'top')
})
我收到关于 file
必须是字符串或连接的错误,如果我使用 read.delim(as.character(file_selected()), header = TRUE)
那么错误是关于 "description" 参数无效
有多种可能的错误原因。请尝试以下步骤:
- 在解析文件路径之前使用
req(input$file)
- 在解析文件路径之前检查
input$file
是否为NULL
- Return
$datapath
的parseFilePaths
函数。
据此,您的代码应如下所示:
file_selected <- reactive({
shinyFileChoose(input, "file", roots = volumes, session = session)
req(input$file)
if (is.null(input$file))
return(NULL)
return(parseFilePaths(volumes, input$file)$datapath)
})
希望对你有用。