파일을 추가하면 자동으로 바인드하는 기능을 만들고 싶었는데 removeUI 기능에서 input의 인자를 제거하지 못하는 것을 확인하였다. 따라서 session을 reset하는 기능으로 이를 대체하였다.
library(DT)
library(shiny)
ui <- fluidPage(
mainPanel(
actionButton("refresh", "초기화"),
actionButton("add", "파일을 추가하려면 눌러주세요."),
tags$div(
fileInput(
'element0','파일을 업로드해주세요'),id='element'),
DTOutput('o1')
)
)
server <- function(input, output,session) {
# 초기화 버튼
observeEvent(input$refresh, {
session$reload()
})
# 파일 추가 버튼
observeEvent(
input$add, {
insertUI(
selector = "#add",
where = "afterEnd",
ui =tags$div(
fileInput(
paste0('element',input$add),'파일을 업로드해주세요'),id='element'))
})
#input의 element0, element1, element2 ... 의 datapath가 변경되면 재실행
df=eventReactive(
input[[paste0('element',input$add)]]$datapath,{
ls=list()
for(file in grep('element',names(input),value=T)){
ls[[file]]=read.csv(input[[file]]$datapath)
}
dplyr::bind_rows(ls)
})
output$o1=renderDT({df()})
}
shinyApp(ui = ui, server = server)