如何将Shiny应用响应式数据传递至RStudio脚本并替换子应用输入
实现Shiny应用间的响应式数据传递
1. 修改初始Shiny应用代码
调整数据读取逻辑,并在触发第二个应用时,将上传的数据集和选中的目标列保存为临时文件,供后续脚本读取:
library(shiny) library(shinyML) library(readxl) library(tools) # Define UI for data upload app ---- ui <- fluidPage( # App title ---- titlePanel("Uploading Files"), # Sidebar layout with input and output definitions ---- sidebarLayout( # Sidebar panel for inputs ---- sidebarPanel( fileInput("file1", "Upload File", multiple = FALSE, accept = c(".csv", ".xlsx", ".xls")), uiOutput("select"), actionButton("launch_app", "Launch second Shiny App") ), # Main panel for displaying outputs ---- mainPanel() ) ) # Define server logic to read selected file ---- server <- function(input, output) { file_info <- reactive({ req(input$file1) # 根据文件后缀读取对应格式的数据 ext <- tools::file_ext(input$file1$name) switch(ext, csv = read.csv(input$file1$datapath), xlsx = readxl::read_excel(input$file1$datapath), xls = readxl::read_excel(input$file1$datapath), stop("仅支持csv/xlsx/xls格式文件")) }) output$select <- renderUI({ req(input$file1) selectInput("sel", "Select target column", choices = colnames(file_info()), selected = colnames(file_info())[1], multiple = FALSE) }) observeEvent(input$launch_app, { # 将数据集和选中的目标列保存为临时RDS文件 saveRDS(list(data = file_info(), target_col = input$sel), file = "temp_data.RDS") # 调用外部脚本 rstudioapi::jobRunScript(path = "C:/Users/User/Documents/Deniz3/script.r") }) } # Create Shiny app ---- shinyApp(ui, server)
2. 修改script.r脚本
读取初始应用保存的临时数据,替换原有的固定数据集和列名:
library(shinyML) # 读取初始应用传递的数据集和目标列 data_obj <- readRDS("temp_data.RDS") # 调用shinyML分类应用,使用传递的动态数据 shinyML_classification(data = data_obj$data, y = data_obj$target_col, framework = "h2o")
3. 保留SHINYML.R脚本(无需修改)
该脚本包含shinyML_classification函数的实现,保持原有逻辑即可。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

