2016-06-23 9 views
0

Ich habe ein Problem mit der Option _row_last_clicked, die für Tabellen zur Verfügung gestellt wird, die in glänzenden Oberflächen mit der ersten DTB-Bibliothek erstellt wurden. Ich versuche, eine Zeile in einer Datentabelle auszuwählen, Änderungen daran vorzunehmen und sie an die glänzende ui.r. auszugeben. Es funktioniert für die erstmalige Auswahl, aber wenn ich erneut auf dieselbe Tabellenzeile klicke, die ich zuvor ausgewählt habe, scheint _row_last_clicked nicht mehr zu reagieren (= NULL?). Hier ist ein Beispiel mininmal (ui.r wahrscheinlich irrelevant) von dem, was ich zu erreichen versuchen:shiny DT _row_last_clicked

# server.r-side: 

table_x<-# ... loads the dataframe 
redo_cal<-reactiveValues() 
redo_cal$a<-1 

observe({ 
    redo_cal$a 
    output$some_table <- DT::renderDataTable(   
     table_x, 
     server = TRUE, # same problem with FALSE 
     selection =c('single') 
    ) 
}) 


observeEvent(
    input$some_table_row_last_clicked,{ 
    s<-input$some_table_row_last_clicked 
    table_x[s,]<- # some reversible modifications based on the row selection ... 
    redo_cal$a<-(redo_cal$a+1) # trigger above renderDataTable 
}) 

Das Problem weiterhin besteht sowohl für die neueste Version von Github DT sowie die Veröffentlichung auf CRAN gefunden. Ich habe mehrere verwandte Beiträge gelesen, konnte aber keine befriedigende Lösung finden. Vielen Dank für Ihre Hilfe!

+0

es ist das Problem, das Sie brauchen, um Tabelle_x als reactiveValue (meine Meinung) zu haben – Batanichek

+0

danke! habe gerade deinen Vorschlag ausprobiert - aber das Problem, die gleiche ui-Tabellenzeile nicht zweimal hintereinander auswählen zu können, bleibt bestehen. – martin

+0

so brauchen Sie 'some_table_row_selected' insted' row_clicked' – Batanichek

Antwort

1

Wenn ich verstehe Sie richtig benötigen Sie some_table_row_selected und table_x (dd$d - in meinem Beispiel) sein reactiveValues

Beispiel Sehen Sie, wo # some reversible modifications based on the row selection == log von x Jedes Mal, wenn Zeilenwert von x in dieser Zeile auswählen log -ed

library(shiny) 
library(DT) 
data=data.frame(x=1:10,y=2:11) 

ui=shinyUI(
    fluidPage(
    DT::dataTableOutput("tt") 
) 
) 


server=shinyServer(function(input, output) { 
    dd=reactiveValues(d=data) 
    output$tt=DT::renderDataTable(
    datatable(
     dd$d,selection =c('single') 
    ) 


) 
    observeEvent(input$tt_rows_selected,{ 

    dd$d[input$tt_rows_selected,1]<-log(dd$d[input$tt_rows_selected,1]) 
    }) 
}) 

shinyApp(ui,server) 

In jeder Sitzung Ihre Daten aktualisiert

PS

Beste minimale Beispiel ist etwas, was jeder kopieren und einfügen kann.

+0

Erstaunlich, das funktioniert! Ich denke, ich habe es verstanden; Das observeEvent _rows_selected löst die erneute Ausführung von dd $ d renderDataTable aus; Dies wiederum setzt das _rows_selected zurück; welche somit bei einem einzigen Eintrag bleiben. In meinem ersten Beispiel wurde dies nicht erneut ausgeführt. Vielen Dank, das hat mich verrückt gemacht ... – martin

Verwandte Themen