我的目标是合并用户的数据集,用户将上传2个数据集并进行合并,如果他们想合并另一个数据集,我将其中的一个存储起来,然后合并并插入另一个模块,然后继续进行。我尝试通过在另一个模块中插入一个模块来实现。我不知道我在做什么错,它没有给我输出所插入模块的输出。需要在模块中完成。
我将不胜感激,因为我被坚持了一段时间。
用于复制以上代码的代码:
require(shiny)
require(shinyFiles)
#===========================================================
uploadDtUI <- function(id){
ns <- NS(id)
tagList(
shinyFilesButton(ns("file_2"), "Select The The Second Dataset", "Please Select The Second Dataset",FALSE),
verbatimTextOutput(ns("filechosen_new"))
)
}
uploadDt <- function(input, output, session) {
ns <- session$ns
roots = c(getVolumes()())
shinyFileChoose(input,"file_2",session = session,root = roots)
file_new <- reactive(input$file_2)
output$filechosen_new <- renderPrint({
as.character(parseFilePaths(roots, input$file_new)[4])
})
}
#=============================================================
selectFilesInput <- function(id) {
ns <- NS(id)
tagList(shinyFilesButton(ns("file"), "Select The First Dataset", "Please Select The First Dataset",FALSE),
verbatimTextOutput(ns("filechosen")),
actionButton(ns("add_ui"), "Add Another Dataset to Merge"),
div(id = ns("placeholder"))
)
}
selectFiles <- function(input, output, session) {
ns <- session$ns
vol <- c(getVolumes()())
shinyFileChoose(input,"file",session = session,root = vol)
file <- reactive(input$file)
output$filechosen <- renderPrint({
as.character(parseFilePaths(vol, input$file)[4])
})
ctn <- reactiveVal(0)
observeEvent(input$add_ui, {
ctn(ctn() + 1)
new_id <- paste("module", ctn(), sep="_")
insertUI(
selector = paste0('#', ns('placeholder')),
where = "afterBegin",
ui = uploadDtUI(ns(new_id))
)
callModule(uploadDt,ns(new_id))
})
}
#=============================================================
ui <- fluidPage(
selectFilesInput("foo")
)
server <- function(input, output, session) {
datafile <- callModule(selectFiles, "foo")
}
shinyApp(ui, server)