Заменить опции в R Shiny можно на лету - PullRequest
0 голосов
/ 13 января 2020

Я хотел бы изменить язык данных на лету

У меня есть следующий код

output$prr2 <- renderDataTable({  
prr()}, options = list(
autoWidth = TRUE,
columnDefs = list(list(width = '50', targets = c(1, 2) ) ),
language = list(url = if(getLanguage()=='gr') '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json' else  
  '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json' ))

getLanguage () возвращает значение selected_language, prr () возвращает data.frame.

Я хочу сделать что-то подобное, чтобы изменить параметры таблицы после выбора другого языка в раскрывающемся списке selected_language

proxy = dataTableProxy('prr2')
observeEvent(input$selected_language,{ replace language option of datatable prr2})

Есть идеи по этому поводу?

1 Ответ

2 голосов
/ 13 января 2020

Я не могу проверить, так как вы не предоставили воспроизводимый пример. Я бы попробовал

output$prr2 <- renderDataTable({  
  prr()
}, options = exprToFunction(list(
  autoWidth = TRUE,
  columnDefs = list(list(width = '50', targets = c(1, 2))),
  language = list(
    url = ifelse(getLanguage()=='gr', 
                 '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json', 
                 '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json')
  )
)))

РЕДАКТИРОВАТЬ

output$prr2 <- renderDataTable({  
  datatable(
    prr(),
    options = exprToFunction(list(
      autoWidth = TRUE,
      columnDefs = list(list(width = '50', targets = c(1, 2))),
      language = list(
        url = ifelse(getLanguage()=='gr', 
                     '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json', 
                     '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json')
      )
    )
    )
  )
})

РЕДАКТИРОВАТЬ 2

Полное приложение, которое работает:

library(shiny)
library(DT)

ui <- fluidPage(
  radioButtons("language", "Language", choices = c("gr", "en")),
  DTOutput("prr2")
)

server <- function(input, output, session){
  output$prr2 <- renderDT({  
    datatable(
      iris,
      options = exprToFunction(list(
        autoWidth = TRUE,
        columnDefs = list(list(width = '50', targets = c(1, 2))),
        language = list(
          url = ifelse(input$language=='gr', 
                       '//cdn.datatables.net/plug-ins/1.10.11/i18n/Greek.json', 
                       '//cdn.datatables.net/plug-ins/1.10.11/i18n/English.json')
        )
      ))
    )
  })
}

shinyApp(ui, server)
...