如何在不创建新的反应性数据框的情况下,在每次按下actionButton时更新反应性数据框? [英] R shiny: How to get an reactive data frame updated each time pressing an actionButton without creating a new reactive data frame?
本文介绍了如何在不创建新的反应性数据框的情况下,在每次按下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屋!
查看全文