studio publicar pestañas instalar graficas examples ejemplos como code app r shiny

publicar - R Brillante: Manejar botones de acción en la tabla de datos



shiny r studio ejemplos (1)

Tengo una aplicación R Shiny con una tabla de datos. Una columna contiene botones de acción con una ID única. Me gustaría manejar los clics en esos botones, pero desafortunadamente, mi código de manejo de eventos (una simple declaración de impresión) nunca se ejecuta. Vea este ejemplo app.R ( app.R ):

library(shiny) library(DT) ui <- shinyUI( fluidPage( title = "DataTable with Buttons", fluidRow( column( width = 8, dataTableOutput("employees") ) ) ) ) server <- shinyServer(function(input, output) { df <- data.frame( name = c(''Dilbert'', ''Alice'', ''Wally'', ''Ashok'', ''Dogbert''), motivation = c(62, 73, 3, 99, 52), stringsAsFactors = FALSE ) fireButtons <- list() fireButtonIds <- list() for (r in rownames(df)) { id <- paste("fire_", r, sep = "") fireButtonIds[[r]] <- id button <- actionButton(id, label = "Fire") fireButtons[[r]] <- as.character(button) } df$actions <- fireButtons dt <- datatable(df, colnames = c("#", "Name", "Motivation", "Actions")) output$employees <- renderDataTable(dt) for (id in fireButtonIds) { # binding doesn''t work # - is the path wrong? # - is it because the button is really a string, not an object? observeEvent(input$employees$x$data$actions[[id]], { print(paste("click on", i)) }) } }) shinyApp(ui = ui, server = server)

Veo dos posibles problemas:

  1. La ruta que estoy usando ( input$employees$x$data$actions[[id]] ) es simplemente incorrecta
  2. La ruta que estoy usando es correcta, pero no apunta a algo que realmente podría manejarse, es decir, es solo una cadena HTML y no un objeto de botón.

¿O tal vez hay una mejor aproximación para poner botones dentro de una tabla de datos ...?


¿Esto logra lo que estás tratando de hacer?

library(shiny) library(DT) shinyApp( ui <- fluidPage( DT::dataTableOutput("data"), textOutput(''myText'') ), server <- function(input, output) { myValue <- reactiveValues(employee = '''') shinyInput <- function(FUN, len, id, ...) { inputs <- character(len) for (i in seq_len(len)) { inputs[i] <- as.character(FUN(paste0(id, i), ...)) } inputs } df <- reactiveValues(data = data.frame( Name = c(''Dilbert'', ''Alice'', ''Wally'', ''Ashok'', ''Dogbert''), Motivation = c(62, 73, 3, 99, 52), Actions = shinyInput(actionButton, 5, ''button_'', label = "Fire", onclick = ''Shiny.onInputChange(/"select_button/", this.id)'' ), stringsAsFactors = FALSE, row.names = 1:5 )) output$data <- DT::renderDataTable( df$data, server = FALSE, escape = FALSE, selection = ''none'' ) observeEvent(input$select_button, { selectedRow <- as.numeric(strsplit(input$select_button, "_")[[1]][2]) myValue$employee <<- paste(''click on '',df$data[selectedRow,1]) }) output$myText <- renderText({ myValue$employee }) } )