R.观察到的问题

R.观察到的问题,r,datatable,shiny,rstudio,shinybs,R,Datatable,Shiny,Rstudio,Shinybs,当在datatable中选择了行,并且有人按下“delete rows”开关时,我试图从数据框中删除这些行。输入$click\u rows\u selected给出所选行的id 我使用ObserveeEvent和observe似乎有问题,因为在我第一次轻按开关时,代码会删除选定的行。但之后,每次我选择一行时,它也会删除该行。开关关闭后,如何停止删除行?if和else语句似乎毫无帮助 代码的缩短版本: observeEvent(input$deleterows,{ if(input$dele

当在datatable中选择了行,并且有人按下“delete rows”开关时,我试图从数据框中删除这些行。输入$click\u rows\u selected给出所选行的id

我使用ObserveeEvent和observe似乎有问题,因为在我第一次轻按开关时,代码会删除选定的行。但之后,每次我选择一行时,它也会删除该行。开关关闭后,如何停止删除行?if和else语句似乎毫无帮助

代码的缩短版本:

observeEvent(input$deleterows,{

  if(input$deleterows==TRUE){

  observe({
        if (is.null(input$click_rows_selected))
           return()
        values$df <- values[input$click_rows_selected,]})} else{ 
 print("check")}
 })
observeEvent(输入$deleterows{
if(输入$deleterows==TRUE){
观察({
如果(为.null(输入$click\u rows\u selected))
返回()

值$df下面的代码应该可以帮助您找到解决方案。 请注意,通常应避免嵌套
观察
的做法

我添加了
updateCheckboxGroupInput
,因为我认为这在示例的上下文中是有意义的

library(shiny)

values <- reactiveValues(df = iris)

ui <- fluidPage( 

  sidebarLayout(

    sidebarPanel(
      checkboxGroupInput('inputId', label=NULL, choices = colnames(df), selected = NULL,
           inline = FALSE, width = NULL, choiceNames = NULL, choiceValues = NULL),
      actionButton("deleterows", "push to delete") 
    ),

    mainPanel(tableOutput("contents")
    )
  ))

server <- function(input,output,session){

  observeEvent(input$deleterows,{
    cols <- setdiff(colnames(values$df), input$inputId)
                    values$df <- values$df[c(cols)]

                    updateCheckboxGroupInput(session, 'inputId', label = NULL, choices = colnames(values$df),
                      selected = NULL, inline = FALSE, choiceNames = NULL,
                      choiceValues = NULL)
 })

output$contents <- renderTable({
        values$df 
  })

}

shinyApp(ui,server)
库(闪亮)

值什么类型的控件是
input$deleterows
?它是一个复选框input您可以将其更改为
actionButton
,还是它需要是一个复选框?我将其更改为复选框,因为actionButton有完全相同的问题。一旦按下它,它将永远保持状态。我认为该复选框可能解决我的问题,因为我可以在其中放入if和else语句。它也失败了。因为问题不在于复选框或按钮,所以您仍然应该使用按钮,除非您希望行为不同:即选中复选框后,每次单击都会立即删除行。单击按钮时,预期行为应该是删除选中的行。