如何在不创建新的反应性数据框的情况下,在每次按下actionButton时更新反应性数据框? [英] R shiny: How to get an reactive data frame updated each time pressing an actionButton without creating a new reactive data frame?

查看:12
本文介绍了如何在不创建新的反应性数据框的情况下,在每次按下actionButton时更新反应性数据框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的闪亮应用程序允许用户使用fileInput上传CSV,并将其存储为反应对象df_data。然后,我创建了一个numericInput,让用户输入要从数据框中删除的行号。但是,我收到一个关于计算嵌套太深的错误:无限递归/Options(Expression=)?

下面是我的ui.r代码。

shinyUI(fluidPage(
  titlePanel("amend data frame"),

  mainPanel(
    fileInput("file", "Upload file"),

    numericInput("Delete", "Delete row:", 1, step = 1),
    actionButton("Go", "Delete!"),

    tableOutput("df_data")
  )
))

下面是我的server.R代码。

shinyServer(function(input, output) {
  df_data <- reactive({
    read.csv(input$file$datapath)
  })

  df_data <- eventReactive(
    input$Go,
    df_data()[-input$Delete,]
  )

  output$df_data <- renderTable(df_data())
})
我已经通过将子集数据帧分配给名为df_data2的新反应数据帧解决了这个问题。但我希望通过在删除行中输入值并按转到按钮,使用户能够继续删除不同的行。则此解决方案将不起作用,因为我必须将df_data3、df_data4.而且我无法提前预测用户将按下转到按钮的次数。

我是一个新用户,大约2周了,我一直在寻找关于这个问题的解决方案已经有一周了。有谁能帮我吗?万分感谢!!

推荐答案

下面是一个有效的解决方案。我创建了reactiveValues来存储数据帧。选择文件后,将填充数据帧。当按下删除按钮时,同一数据帧将删除一行。该表始终输出该DataFrame对象保存的任何内容。我希望这段代码能成为很好的学习材料

runApp(shinyApp(
ui=(fluidPage(
  titlePanel("amend data frame"),

  mainPanel(
    fileInput("file", "Upload file"),

    numericInput("Delete", "Delete row:", 1, step = 1),
    actionButton("Go", "Delete!"),

    tableOutput("df_data_out")
  )
)),
server = (function(input, output) {
  values <- reactiveValues(df_data = NULL)

  observeEvent(input$file, {
    values$df_data <- read.csv(input$file$datapath)
  })

  observeEvent(input$Go, {
    temp <- values$df_data[-input$Delete, ]
    values$df_data <- temp

  })

  output$df_data_out <- renderTable(values$df_data)
})))

这篇关于如何在不创建新的反应性数据框的情况下,在每次按下actionButton时更新反应性数据框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆