动态替换 R Shiny 数据表中的选项
Posted
技术标签:
【中文标题】动态替换 R Shiny 数据表中的选项【英文标题】:Replace options in R Shiny datatable on the fly 【发布时间】:2020-04-30 02:23:12 【问题描述】:我想即时更改数据表的语言
我有以下代码
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)
对此有什么想法吗?
【问题讨论】:
你的意思是language = list(url = if(getLanguage()=='gr') ......
不起作用?
第一次调用 renderDataTable 时确实有效。但我想根据选择刷新它。每次语言选择改变时,我都希望数据表改变它的语言
【参考方案1】:
我无法测试,因为您没有提供可重现的示例。我会试试的
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)
【讨论】:
如果唯一的变化是exprToFunction,看来这个解决方案对我不起作用。当我用 id selected_language 更改 doropdown 的值时,数据表的翻译没有任何反应,我应该添加 getLanguage() 返回 selected_language 的值 我已经复制粘贴了您的代码,它不会产生错误但不起作用。 prr() 返回一个data.frame ***.com/questions/56879672/… github.com/rstudio/DT/issues/168 这里有一些相关的例子,但是那里的代码替换了数据而不是选项 @vagelis 对我来说有效。也许你不使用好的renderDataTable
。使用renderDT
或DT::renderDataTable
。
是的,这行得通。我用 input$selected_language 更改了 getLanguage() 并且它有效(我不明白为什么)。谢谢!另外,您能否解释一下 exprToFunction 为什么起作用?以上是关于动态替换 R Shiny 数据表中的选项的主要内容,如果未能解决你的问题,请参考以下文章