Is there any way to add custom R-function action to a button in DT?
I'm trying to add a custom button performing the action defined by R-function to my datatable. I've used the same list of options in my R code as in Javascript code in Datatables manual, but it doesn't work.
Here is a code from Datatables manual:
$(document).ready(function() {
$('#example').DataTable( {
dom: 'Bfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
alert( 'Button activated' );
}
}
]
} );
} );
And here is my code in R:
require(DT)
DT::datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
list(
text = 'test',
action = print('1')
)
)
)
)
Executing it I've received an error:
Error in if (extend != "collection") extend else listButtons(cfg) :
argument is of length zero
r datatables dt
add a comment |
I'm trying to add a custom button performing the action defined by R-function to my datatable. I've used the same list of options in my R code as in Javascript code in Datatables manual, but it doesn't work.
Here is a code from Datatables manual:
$(document).ready(function() {
$('#example').DataTable( {
dom: 'Bfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
alert( 'Button activated' );
}
}
]
} );
} );
And here is my code in R:
require(DT)
DT::datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
list(
text = 'test',
action = print('1')
)
)
)
)
Executing it I've received an error:
Error in if (extend != "collection") extend else listButtons(cfg) :
argument is of length zero
r datatables dt
add a comment |
I'm trying to add a custom button performing the action defined by R-function to my datatable. I've used the same list of options in my R code as in Javascript code in Datatables manual, but it doesn't work.
Here is a code from Datatables manual:
$(document).ready(function() {
$('#example').DataTable( {
dom: 'Bfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
alert( 'Button activated' );
}
}
]
} );
} );
And here is my code in R:
require(DT)
DT::datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
list(
text = 'test',
action = print('1')
)
)
)
)
Executing it I've received an error:
Error in if (extend != "collection") extend else listButtons(cfg) :
argument is of length zero
r datatables dt
I'm trying to add a custom button performing the action defined by R-function to my datatable. I've used the same list of options in my R code as in Javascript code in Datatables manual, but it doesn't work.
Here is a code from Datatables manual:
$(document).ready(function() {
$('#example').DataTable( {
dom: 'Bfrtip',
buttons: [
{
text: 'My button',
action: function ( e, dt, node, config ) {
alert( 'Button activated' );
}
}
]
} );
} );
And here is my code in R:
require(DT)
DT::datatable(iris,
extensions = 'Buttons',
options = list(
dom = 'Bfrtip',
buttons = list(
list(
text = 'test',
action = print('1')
)
)
)
)
Executing it I've received an error:
Error in if (extend != "collection") extend else listButtons(cfg) :
argument is of length zero
r datatables dt
r datatables dt
edited Nov 17 '18 at 13:48
asvx
asked Nov 17 '18 at 13:27
asvxasvx
1515
1515
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You have to set extend = "collection"
, like this:
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' );
}")
)
)
)
)
But the action can only execute some Javascript, not a R command. However you can execute a R command by clicking a custom button if you put the datatable in a shiny application. Something like that:
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)
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve addedpriority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.
– asvx
Nov 18 '18 at 11:51
Could you clarify why did you useif(input$test)
? The code works fine for me without it.
– asvx
Nov 18 '18 at 11:58
@asvx You're right, theif
is useless. And you're right to usepriority: "event"
. I didn't knowpriority: "event"
, I used a trick before to trigger the input change when the value does not change, but usingpriority: "event"
is definitely better. Thanks.
– Stéphane Laurent
Nov 19 '18 at 9:34
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53351684%2fis-there-any-way-to-add-custom-r-function-action-to-a-button-in-dt%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You have to set extend = "collection"
, like this:
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' );
}")
)
)
)
)
But the action can only execute some Javascript, not a R command. However you can execute a R command by clicking a custom button if you put the datatable in a shiny application. Something like that:
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)
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve addedpriority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.
– asvx
Nov 18 '18 at 11:51
Could you clarify why did you useif(input$test)
? The code works fine for me without it.
– asvx
Nov 18 '18 at 11:58
@asvx You're right, theif
is useless. And you're right to usepriority: "event"
. I didn't knowpriority: "event"
, I used a trick before to trigger the input change when the value does not change, but usingpriority: "event"
is definitely better. Thanks.
– Stéphane Laurent
Nov 19 '18 at 9:34
add a comment |
You have to set extend = "collection"
, like this:
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' );
}")
)
)
)
)
But the action can only execute some Javascript, not a R command. However you can execute a R command by clicking a custom button if you put the datatable in a shiny application. Something like that:
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)
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve addedpriority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.
– asvx
Nov 18 '18 at 11:51
Could you clarify why did you useif(input$test)
? The code works fine for me without it.
– asvx
Nov 18 '18 at 11:58
@asvx You're right, theif
is useless. And you're right to usepriority: "event"
. I didn't knowpriority: "event"
, I used a trick before to trigger the input change when the value does not change, but usingpriority: "event"
is definitely better. Thanks.
– Stéphane Laurent
Nov 19 '18 at 9:34
add a comment |
You have to set extend = "collection"
, like this:
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' );
}")
)
)
)
)
But the action can only execute some Javascript, not a R command. However you can execute a R command by clicking a custom button if you put the datatable in a shiny application. Something like that:
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)
You have to set extend = "collection"
, like this:
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' );
}")
)
)
)
)
But the action can only execute some Javascript, not a R command. However you can execute a R command by clicking a custom button if you put the datatable in a shiny application. Something like that:
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)
edited Nov 17 '18 at 18:59
answered Nov 17 '18 at 18:33
Stéphane LaurentStéphane Laurent
13.1k75393
13.1k75393
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve addedpriority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.
– asvx
Nov 18 '18 at 11:51
Could you clarify why did you useif(input$test)
? The code works fine for me without it.
– asvx
Nov 18 '18 at 11:58
@asvx You're right, theif
is useless. And you're right to usepriority: "event"
. I didn't knowpriority: "event"
, I used a trick before to trigger the input change when the value does not change, but usingpriority: "event"
is definitely better. Thanks.
– Stéphane Laurent
Nov 19 '18 at 9:34
add a comment |
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve addedpriority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.
– asvx
Nov 18 '18 at 11:51
Could you clarify why did you useif(input$test)
? The code works fine for me without it.
– asvx
Nov 18 '18 at 11:58
@asvx You're right, theif
is useless. And you're right to usepriority: "event"
. I didn't knowpriority: "event"
, I used a trick before to trigger the input change when the value does not change, but usingpriority: "event"
is definitely better. Thanks.
– Stéphane Laurent
Nov 19 '18 at 9:34
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve added
priority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.– asvx
Nov 18 '18 at 11:51
That works, but I’ve changed your code slightly in order to use the button as a trigger. So I’ve added
priority: "event"
option as it was described in the section 'Values vs. Events' of this Shiny manual page.– asvx
Nov 18 '18 at 11:51
Could you clarify why did you use
if(input$test)
? The code works fine for me without it.– asvx
Nov 18 '18 at 11:58
Could you clarify why did you use
if(input$test)
? The code works fine for me without it.– asvx
Nov 18 '18 at 11:58
@asvx You're right, the
if
is useless. And you're right to use priority: "event"
. I didn't know priority: "event"
, I used a trick before to trigger the input change when the value does not change, but using priority: "event"
is definitely better. Thanks.– Stéphane Laurent
Nov 19 '18 at 9:34
@asvx You're right, the
if
is useless. And you're right to use priority: "event"
. I didn't know priority: "event"
, I used a trick before to trigger the input change when the value does not change, but using priority: "event"
is definitely better. Thanks.– Stéphane Laurent
Nov 19 '18 at 9:34
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53351684%2fis-there-any-way-to-add-custom-r-function-action-to-a-button-in-dt%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown