闪亮 - 无需用户交互即可导入和导出,只需指定一个文件及其路径

Shiny - importing and exporting without user interaction by only specifying one file and its path

我看到的所有闪亮教程都通过 fileInput() 手动导入多个数据,然后手动导出。

目前,我只有一个 R 脚本文件,我每次 运行 手动更改几个变量。

例如,在目录 C:/Users/Users/Project/000-0000 中,我想使用来自 000-0000_NewData.

的信息更新 000-0000_result1000-0000_result2
#### Variables I change
file_name <- "C:/Users/Users/Project/000-0000/000-0000_NewData.csv"
parameterNum <- 3

#### Rest of the codes that I never change
setwd(dirname(file_name)
projectID <- str_extract(file_name, "[^_]+") #would be 000-0000 in this case
dat0 <- read_csv(file_name)
prev_result1 <- read_csv(str_c(projectID, "_result1"))
prev_result2 <- read_csv(str_c(projectID, "_result2"))
... #data step using parameterNum
write_csv(new_result1, str_c(projectID, "_result1"))
write_csv(new_result2, str_c(projectID, "_result2"))

我想创建一个闪亮的应用程序,我可以在其中指定 file_namefileInput("dat0","Upload a new data")numericInput() 然后 运行 脚本的其余部分。 我不想手动 select 多个文件然后导出它们,因为我有很多 _result 文件与共享相同文件类型的其他文件混合在一起。

我正在查看 input$dat0$datapath,但 shiny 似乎创建了一个 tmp 文件夹,其中仅包含通过 fileInput()

加载的文件

我的计划可以使用 Shiny 吗?我正在使用 flexdashboard,但我也欢迎并将尝试自己调整标准的 Shiny 答案。

也许是这样的:

library(shiny)
library(tidyverse)

ui <- fluidPage(
  textInput('file_name', 'Path to filename', value = "C:/Users/Users/Project/000-0000/000-0000_NewData.csv"),
  numericInput('parameterNum', 'Insert Parameter Number',value = 3, min = 0),
  actionButton(inputId = 'save', label = 'Write csvs')
)

server <- function(input, output, session) {
  
  observe({
    setwd(dirname(input$file_name))
  })
  
  projectID <- reactive({
      str_extract(inpt$file_name, "[^_]+")
  })
  
  prev_result1 <- reactive({
    read_csv(str_c(projectID(), "_result1"))
    #some calculation
  })
  
  prev_result2 <- reactive({
    read_csv(str_c(projectID(), "_result2"))
    #some calculation
  })
  
  observeEvent(input$save, {
    write_csv(prev_result1(), str_c(projectID(), "_result1"))
    write_csv(prev_result2(), str_c(projectID(), "_result2"))
  })

}

shinyApp(ui, server)