我正在尝试向我的数据表添加一个自定义按钮,以执行R函数定义的操作。我在R代码中使用的选项列表与Datatables manual中的Javascript代码中使用的选项列表相同,但是不起作用。
这是Datatables manual中的代码:
$(document).ready(function() {
$('#example').DataTable( {
dom: 'Bfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
alert( 'Button activated' );
}
}
]
} );
} );
这是我在R中的代码:
require(DT)
DT::datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
list(
text = 'test',
action = print('1')
)
)
)
)
执行它,我收到一个错误:
Error in if (extend != "collection") extend else listButtons(cfg) :
argument is of length zero
答案 0 :(得分:1)
您必须像这样设置extend = "collection"
:
library(DT)
datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
"copy",
list(
extend = "collection",
text = 'test',
action = DT::JS("function ( e, dt, node, config ) {
alert( 'Button activated' );
}")
)
)
)
)
但是该操作只能执行一些Javascript,而不能执行R命令。但是,如果您将数据表放在闪亮的应用程序中,则可以通过单击自定义按钮来执行R命令。像这样:
library(shiny)
library(DT)
ui <- basicPage(
DTOutput("dtable")
)
server <- function(input, output, session){
output$dtable <- renderDT(
datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
"copy",
list(
extend = "collection",
text = 'test',
action = DT::JS("function ( e, dt, node, config ) {
Shiny.setInputValue('test', true);
}")
)
)
)
)
)
observeEvent(input$test, {
if(input$test){
print("hello")
}
})
}
shinyApp(ui, server)