Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何在不创建新的反应性数据框的情况下,在每次按actionButton时更新反应性数据框?_R_Shiny - Fatal编程技术网

R:如何在不创建新的反应性数据框的情况下,在每次按actionButton时更新反应性数据框?

R:如何在不创建新的反应性数据框的情况下,在每次按actionButton时更新反应性数据框?,r,shiny,R,Shiny,我的闪亮应用程序允许用户使用文件输入上传csv,并将其存储为反应对象DFU数据。然后,我为用户创建了一个数字输入,以输入要从数据帧中删除的行号。然而,我得到了一个关于计算嵌套太深的错误:无限递归/选项(表达式=)? 下面是我的ui.R代码 shinyUI(fluidPage( titlePanel("amend data frame"), mainPanel( fileInput("file", "Upload file"), numericInput("Delete

我的闪亮应用程序允许用户使用文件输入上传csv,并将其存储为反应对象DFU数据。然后,我为用户创建了一个数字输入,以输入要从数据帧中删除的行号。然而,我得到了一个关于计算嵌套太深的错误:无限递归/选项(表达式=)?

下面是我的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())
})
shinyServer(功能(输入、输出){

下面的df_data是一个有效的解决方案。我创建了一个
reactiveValues
来存储数据框。当选择一个文件时,数据框会被填充。当按下delete按钮时,相同的数据框会被删除一行。表总是输出数据框对象所包含的任何内容。我希望这段代码能成为一个很好的学习材料

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)
})))
runApp(shinyApp)(
ui=(fluidPage)(
标题板(“修改数据框”),
主面板(
文件输入(“文件”、“上传文件”),
数值输入(“删除”,“删除行:”,1,步骤=1),
操作按钮(“去”,“删除!”),
表格输出(“df_数据_输出”)
)
)),
服务器=(函数(输入、输出){

值谢谢!效果非常好!我想进一步询问为什么需要使用
observeEvent()
,而不是
observeEvent())
。这两者之间的区别是什么?谢谢!您可以使用常规的
observeEvent
。主要区别是
observeEvent
将要侦听的响应作为参数,因此默认情况下,表达式中的任何其他响应值都是隔离的。此外,当响应为NULL(通常为空)时,不会触发它n处理输入时需要什么(否则您通常会在
观察
中的第一行变成
if(is.null(input$xxx))return()
)我很高兴您这么认为:)因此,没有一个解决方案只使用反应式表达式。您需要使用reactiveValues@Jochem,我不知道这是否是最好的方法,但这个解决方案仍然有效。(2020年8月)