Ich versuche eine App mit glänzenden Modulen und data.table zu entwickeln, aber ich kann nicht herausfinden, wie es funktioniert. Ein kleines Beispiel ist die folgende App, die als Argumente des Moduls eine data.table, eine Variable und einen Cut-Wert erhält und alle Ergebnisse basierend auf dem Filtern der data.table mit den Argumenten ausgeben soll.Shiny Module und data.table Filter: funktioniert nicht wie erwartet
library(shiny)
library(data.table)
name <-c('a','b','c','d','e')
value <- c(2,4,6,8,10)
data <- data.table(name,value)
# MODULE UI
test_UI <- function(id) {
ns <- NS(id)
textOutput(ns("test"))
}
# MODULE Server
test_OUT <- function(input, output, session, df, var, x) {
output$test <- renderText({
d <- df[var > x, ]
print(unique(d$name))
})
}
# App ui
ui <- fluidPage(
test_UI("test")
)
# App server
server <- function(input, output,session){
callModule(test_OUT, "test", data, 'value', 6)
}
# App
shinyApp(ui, server)
Das Ergebnis ist:
> a b c d e
Wenn es sein soll:
> d e
Ich weiß, wenn ich dplyr oder andere Verfahren zum Filtern verwenden, sollte dies funktionieren, aber ich brauche data.table for performance, da es sich um sehr große Datensätze handelt. Vielen Dank im Voraus!
danke Nathan! Ich werde data.table Dokumente überprüfen. Ich habe es "auf sehr chaotische Weise" gelernt. Sehen Sie Probleme mit der "Get" -Lösung? Danke noch einmal. – COLO
'get' kann zu unerwartetem Verhalten führen, da es auch außerhalb der data.table aussehen kann. Zum Beispiel, wenn die Variable 'foo' in' test_OUT' zugewiesen ist und jemand das Modul mit 'var =" foo "' aufruft, dann liefert 'get (var) '' 'foo', aber' df [[var]] 'gibt' NULL' zurück. –
danke. Das macht Sinn. – COLO