блестящий DT _row_last_clicked

У меня возникла проблема с опцией _row_last_clicked для таблиц, созданных в блестящих интерфейсах с библиотекой rstudio DT. Я пытаюсь выбрать строку в таблице данных, внести в нее изменения и вывести ее в блестящий ui.r. Это работает для первого выбора, но когда я снова нажимаю на ту же строку таблицы, которую я только что выбрал ранее, _row_last_clicked, похоже, не отвечает (= NULL?). Вот минимальный пример (вероятно, ui.r не имеет значения) того, чего я пытаюсь достичь:

# 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
})

Проблема сохраняется как для последней версии DT на github, так и для версии, найденной в CRAN. Я прочитал несколько связанных сообщений, но не смог найти удовлетворительного решения. Большое спасибо за Вашу помощь!


person martin    schedule 23.06.2016    source источник
comment
это проблема области действия, вам нужно иметь table_x как reactiveValue (мне кажется)   -  person Batanichek    schedule 24.06.2016
comment
Спасибо! только что попробовал ваше предложение, но проблема с невозможностью выбрать одну и ту же строку таблицы пользовательского интерфейса дважды подряд сохраняется.   -  person martin    schedule 24.06.2016
comment
поэтому вам нужно some_table_row_selected вставить row_clicked   -  person Batanichek    schedule 24.06.2016
comment
благодарю вас. его some_table_rows_selected; но проблема сохраняется.   -  person martin    schedule 24.06.2016


Ответы (1)


Если я вас правильно понял, вам нужно some_table_row_selected и table_x (dd$d - в моем примере) быть reactiveValues

См. пример, где # some reversible modifications based on the row selection == log из x Каждый раз, когда вы выбираете значение строки x в этой строке 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)

В каждом сеансе ваши данные обновляются

PS

Лучший минимальный пример — это то, что каждый может скопировать\вставить и протестировать.

person Batanichek    schedule 24.06.2016
comment
Удивительно, это работает! Я думаю, что понял суть; ObserveEvent _rows_selected запускает повторное выполнение dd$d renderDataTable; это, в свою очередь, сбрасывает _rows_selected; которые, таким образом, остаются на одной записи. В моем первоначальном примере это не выполнялось повторно. Спасибо большое, это меня с ума свело... - person martin; 24.06.2016