为了通过最小示例来说明我的问题,让我们考虑下面的代码(这是一个完全可重现的示例).
library(shiny)
ui <- fluidPage(
fileInput("upload", NULL, accept = c(".csv", ".tsv")),
numericInput("n", "Rows", value = 5, min = 1, step = 1),
tableOutput("head"),
fileInput("upload2", NULL, accept = c(".csv", ".tsv")),
numericInput("n2", "Rows", value = 5, min = 1, step = 1),
tableOutput("head2")
)
server <- function(input, output, session) {
data <- reactive({
req(input$upload)
ext <- tools::file_ext(input$upload$name)
switch(ext,
csv = vroom::vroom(input$upload$datapath, delim = ","),
tsv = vroom::vroom(input$upload$datapath, delim = "\t"),
validate("Invalid file; Please upload a .csv or .tsv file")
)
})
output$head <- renderTable({
head(data(), input$n)
})
data2 <- reactive({
req(input$upload2)
ext <- tools::file_ext(input$upload2$name)
switch(ext,
csv = vroom::vroom(input$upload2$datapath, delim = ","),
tsv = vroom::vroom(input$upload2$datapath, delim = "\t"),
validate("Invalid file; Please upload a .csv or .tsv file")
)
})
output$head2 <- renderTable({
tail(data2(), input$n2)
})
}
shinyApp(ui, server)
该应用程序要求用户上传一个数据集,然后询问行数并显示head()
个上传数据.如果用户上传另一个数据集,同样会显示它的tail
.
现在我的要求是,每当shiny 的应用程序用户上传data2
来显示底部行时,顶部/头部行的data
应该与其head
信息一起从环境中删除;反之亦然.
我try 了很多方法,比如使用observeEvent
、eventReactive
等,但我做不到.请提个建议.