Box*_*uan 6 javascript r shiny
[码]
library(shiny)
server <- function(input, output) {
output$iris_type <- renderDataTable({
data.frame(Species=paste0("<a href='#filtered_data'>", unique(iris$Species), "</a>"))
})
output$filtered_data <- renderDataTable({iris})
}
ui <- shinyUI(fluidPage(
mainPanel(
tabsetPanel(
tabPanel("Iris Type", dataTableOutput("iris_type")),
tabPanel("Filtered Data", dataTableOutput("filtered_data"))
)
)
))
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
[题]
我试图将DataTable第一个选项卡上的输出链接到第二个选项卡.例如,当我点击时setosa,下一个显示的是第二个选项卡,iris其中仅包含数据集setosa.它应该从R:执行这段代码iris[iris$Species=="setosa",].它应该用于其他工作Species中iris了.
如何通过单击建立链接并运行该R命令?
[答案更新]
如果您有不同的布局并且需要具体,那么您可以执行此操作.
你的DataTable回调函数:
callback =
"function(table) {
table.on('click.dt', 'tr', function() {
Shiny.onInputChange('rows', table.row(this).data()[0] );
$(\".tabbable .nav.nav-tabs li a:contains('Filtered Data')\").click();
});
}"
Run Code Online (Sandbox Code Playgroud)你的R代码:
output$filtered_data <- renderDataTable({
tagString <- input$rows
rawTags <- gsub("</a>", "", gsub("<a href='#filtered_data'>", "", tagString))
if (identical(tagString, character(0))) {
iris
} else {
...
}
})
Run Code Online (Sandbox Code Playgroud)在第一个表的行上有点击功能更容易。您可以添加一个回调来查找表行上的点击。当观察到点击时,行索引被发送到闪亮的反应输入:
library(shiny)
server <- function(input, output) {
output$iris_type <- renderDataTable({
data.frame(Species=paste0("<a href='#filtered_data'>", unique(iris$Species), "</a>"))
},
callback = "function(table) {
table.on('click.dt', 'tr', function() {
Shiny.onInputChange('rows', table.row( this ).index());
tabs = $('.tabbable .nav.nav-tabs li a');
$(tabs[1]).click();
});
}")
output$filtered_data <- renderDataTable({
if(is.null(input$rows)){
iris
}else{
iris[iris$Species %in% unique(iris$Species)[as.integer(input$rows)+1], ]
}
})
}
ui <- shinyUI(fluidPage(
mainPanel(
tabsetPanel(
tabPanel("Iris Type", dataTableOutput("iris_type")),
tabPanel("Filtered Data", dataTableOutput("filtered_data"))
)
)
))
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)