有没有办法以闪亮的动作按钮递归地向data.frame添加行?

时间:2018-01-23 09:01:11

标签: r dataframe shiny

我想实现一个功能“当用户单击一次操作按钮时,会在数据框中添加一行”。例如,单击一次时添加一行[1,2,3]。我尝试了代码

res <- reactive({NULL})
res <- eventReactive({input$button, 
  rbind(res(), t(c(1,2,3)))
})

但是,这不起作用。那么,有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:3)

我个人会为此目的使用reactiveValobserveEvent,如下所示:

library(shiny)
ui <- fluidPage(
  actionButton('btn1','button'),
  dataTableOutput('table1')
)

server <- function(input,output){

  my_df <- reactiveVal(cars[1:5,])

  observeEvent(input$btn1,{
    # call old value with my_df(), rbind the new row, and set the new value 
    # by wrapping the statement with my_df()
    my_df(rbind(my_df(), c(1,2)))
  })

  output$table1 <- renderDataTable(
    my_df())
}

shinyApp(ui,server)

答案 1 :(得分:0)

我不确定为什么这是一个棘手的问题。将先前的数据帧存储在全局变量中并一次又一次地进行rbinding非常简单。

代码:

library(shiny)
ui <- fluidPage(
  actionButton('btn1','button'),
  dataTableOutput('table1')
)

global_df <- cars[1:5,]

server <- function(input,output){

  new_df <- eventReactive(input$btn1,{

    global_df <<- rbind(global_df, c(1,2))
    global_df
  })

    output$table1 <- renderDataTable(
     new_df())



}


shinyApp(ui,server)