[code]R linki błyszczące budować między kartami
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)
[Pytanie]
Próbuję połączyć wyjście DataTable
na pierwszej karcie do drugiej zakładce. Na przykład po kliknięciu na setosa
kolejną rzeczą, która się pojawi, jest druga karta z iris
zestawem danych zawierającym tylko setosa
. Powinien wykonać ten fragment kodu z R: iris[iris$Species=="setosa",]
. To powinno działać również dla innych Species
w iris
.
Jak mogę utworzyć łącze i uruchomić polecenie R, klikając?
[Aktualizacja na odpowiedź]
W przypadku gdy masz inny układ i musi być konkretne, o to co można zrobić.
Twoja funkcja
DataTable
zwrotna: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(); }); }"
Kod
R
:output$filtered_data <- renderDataTable({ tagString <- input$rows rawTags <- gsub("</a>", "", gsub("<a href='#filtered_data'>", "", tagString)) if (identical(tagString, character(0))) { iris } else { ... } })
Dzięki! Dokładnie to, czego szukam! – Boxuan
Szukałem w Internecie dla podobnego rozwiązania i to działa dobrze, ale zauważam, że jeśli miałbyś ponownie sortować linki w tabeli typu Iris tak, że Virginica jest na górze, a następnie kliknij na link do Virginica , przywraca kolumny Setosa w zakładce Filtered Data. Myślę, że dzieje się tak dlatego, że w javascriptie "table.row" jest zdefiniowany tak, że pierwszy wiersz to zawsze Setosa, drugi Versicolor i trzeci Virginica. Czy istnieje sposób, w jaki javascript mógłby zidentyfikować nazwę w wierszu, zamiast samego numeru wiersza? –