R.观察到的问题
当在datatable中选择了行,并且有人按下“delete rows”开关时,我试图从数据框中删除这些行。输入$click\u rows\u selected给出所选行的id 我使用ObserveeEvent和observe似乎有问题,因为在我第一次轻按开关时,代码会删除选定的行。但之后,每次我选择一行时,它也会删除该行。开关关闭后,如何停止删除行?if和else语句似乎毫无帮助 代码的缩短版本: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
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语句。它也失败了。因为问题不在于复选框或按钮,所以您仍然应该使用按钮,除非您希望行为不同:即选中复选框后,每次单击都会立即删除行。单击按钮时,预期行为应该是删除选中的行。