闪亮删除表行

时间:2017-06-20 20:42:33

标签: r shiny

我想使用操作按钮删除表格的最后一行。我试过关注这篇文章Shiny: dynamically add/ remove textInput rows based on index 但我不知道如何将这个想法应用到我的特定情况。

最小可重复的例子

library(shiny)

ui <- fluidPage(
  sidebarPanel(numericInput("c1","Example", NA),
           actionButton("update", "Update Table"),
           br(),  br(),
           actionButton("reset", "Clear")
  ),

  mainPanel( tableOutput("example")
  )
)

server <- function(input, output, session) {

  # stores the current data frame, called by values() and set by 
  values(new_data_table)
  values <- reactiveVal(data.frame(A=1, B=2, C=3))

  # update values table on button click
  observeEvent(input$update,{

    old_values <- values()

    A_new <- input$c1
    B_new <- A_new + 2
    C_new <- A_new + B_new

    new_values <- data.frame(A=A_new, B=B_new, C=C_new)

    # attach the new line to the old data frame here:
    new_df <- rbind(old_values, new_values)

    #store the result in values variable
    values(new_df)

    #reset the numeric input to NA  
    updateNumericInput(session, "c1", "Example", NA)

  })
 #delete last row
   deleteEntry <- observeEvent(input$reset,{
                 #.... 
 })

  #Print the content of values$df
  output$example <- renderTable({  return(values())  })

}

shinyApp(ui = ui, server = server)

实际上我不知道如何调用交互式数据框的最后一行。我尝试过像values()&lt; - values [nrow(values()) - 1]这样的东西,但它没有用。有什么建议吗?

已编辑

根据下面的建议,我修改了deleteEntry函数,现在它可以正常工作。

 ##delete last row
   deleteEntry <- observeEvent(input$reset,{
                 values( values()[-nrow(values()),])
 })

1 个答案:

答案 0 :(得分:1)

要将data.frame的最后一行删除为reactiveVal,请使用以下语法:

values(values()[-nrow(values()),])