我指的是我以前的帖子:while updating the datatable in R shiny, how to make column inputs necessary fields using "validate" and "need" in R shiny

我正在制作一个Rshiny 的应用程序,用户可以通过点击"添加"按钮并将数据保存到一个文件夹中来添加许多行.xpt文件.到目前为止,一切正常.

我只是停留在下面:

然而,为了扩展这个应用程序,我在服务器功能中添加了"清除"按钮以及"react 值",这样当用户单击它时,所有以前的行(添加的行)都被删除(清除),应用程序就可以接受新行了.我仍然可以添加行,但clear选项不起作用,也不会给我任何错误.有人能帮我吗?

code

library(shiny)
library(stringr)
library(shinydashboard)
library(tidyverse)
library(DT)
library("SASxport")

ui <- fluidPage(
  fluidRow(tabsetPanel(id='tabs', 
                       tabPanel("Tab1",
                                div(id = "form", 
                                    textInput("schoolId", label="SchoolId *" ),
                                    selectInput("userId", label="UserId", choices = c("UserA", "UserB", "UserC"),selected = "UserA"), 
                                    textInput("class", label = "class"), 
                                    selectInput("result", label="result", choices = c("PASS", "FAIL" )),
                                    #dateInput("resultdate", value = NA, label = "Date of the result / Remarks for fail"
                                              #, format = "yyyy-mm-dd" )
                                ),
                                actionButton("add", "Add"),
                                actionButton("clear", "Clear")
                       ), 
                       tabPanel("Tab2", 
                                tabPanel("View", 
                                         conditionalPanel("input.add != 0", 
                                                          DTOutput("DT2"), hr(), downloadButton('downloadData', 'Download'))
                                )
                       )
  )
  )
)

server <- function(input, output, session) {
  store <- reactiveValues()
  
  observeEvent(input$add,{
    new_entry <- data.frame(SCHOOLID=input$schoolId, USERID=input$userId
                            , CLASS= input$class
                            , RESULT=input$result
                            )
   # new_entry <- data.frame(SCHOOLID=input$schoolId, USERID=input$userId
                           # , CLASS= input$class
                            #, RESULT=input$result,
                            #RESULT_DATE = input$resultdate)
    
    if("value" %in% names(store)){
      store$value<-bind_rows(store$value, new_entry)
    } else {
      store$value<-new_entry
    }
    # If you want to reset the field values after each entry use the following two lines
    for(textInputId in c("schoolId", "class")) updateTextInput(session, textInputId, value = "")
    updateSelectInput(session, "userId", selected = "UserA")
    updateSelectInput(session, "result", selected = "PASS")
    # updateDateInput(session, "resultdate")
  })
  output$DT2 <- renderDT({
    store$value
  })
  

  
  output$downloadData <- downloadHandler(
    filename = paste0("mydata", ".xpt"),
    content = function(file){
      write.xport(store$value, file = file)
    }
  )
  new_frame <- reactive({
    store$value
  })
  
  #function allows to clear the rows
  values <- reactiveValues(df_data = new_frame)
  
  observeEvent(input$clear,{
    
    if (!is.null(input$table1_rows_selected)) {
      
      values$df_data <- values$df_data[-as.character(input$table1_rows_selected),]
    }
  })
  
  output$Tab2 <- renderDataTable({
    values$df_data
  })
  
}

shinyApp(ui, server)

推荐答案

这里的问题是,在如何获取要删除的选定行方面有一点疏忽.我们不需要从DT表中获取选定的行,而需要直接从ui元素DT2中获取它们

此外,您可以直接在服务器中创建的DT表上工作,而不是存储新的响应值

以下是修改后的(相关)服务器代码:

  #xxxxxxxx this   not needed 
  #values <- reactiveValues(df_data = new_frame)
  
  observeEvent(input$clear,{
   
    if (!length(input$DT2_rows_selected)==0) {
  #work directly on store variable      
      store$value<- store$value[-as.numeric(input$DT2_rows_selected),]
    }       
    
    
  })

我已经测试过了,效果很好.如果需要,可以发布整个应用程序代码.

R相关问答推荐

是什么导致R中的mvtnorm包中出现这个错误?

如何使用TukeyHSD绘制事后概率热图

在处理因素时,Base R grep家族比stringr变体快得多

根据列中的数字移动单元格位置

如何将多个数据帧附加到R中的多个相应的CSV文件中?

将模拟变量乘以多个观测结果中的模拟变量

变量计算按R中的行更改

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

找出疾病消失的受试者

R根据条件进行累积更改

计算时间段的ECDF(R)

Ggplot2中的重复注记

使用较长的查询提取具有部分匹配的列表中的较短目标,

R中的时间序列(Ts)函数计数不正确

如何用书面利率绘制geom_bar图

如何基于两个条件从一列中提取行

如何根据R中其他变量的类别汇总值?

如何使用同比折线图中的个别日

如何在R中使用混合GAM模型只对固定的影响因素进行适当的预测?