R brillant - fenêtre pop-up avec des options
Im création d'une brillante application qui interroge une base de données SQL. Je tiens à avertir l'utilisateur si la requête de données comporte des entrées sur deux dates. En outre, je veux que l'utilisateur soit en mesure de sélectionner l'ensemble de données à interroger. Voici un exemple:
Serveur
# Create example data
set.seed(10)
MeasurementA <- rnorm(1000, 5, 2)
MeasurementB <- rnorm(1000, 5, 2)
Wafer <- rep(c(1:100), each=10)
ID <- rep(c(101:200), each=10)
Batch <- rep(LETTERS[seq(from=1, to =10)], each=100)
Date <- rep(seq(as.Date("2001-01-01"), length.out = 100, by="1 day"), each=10)
# Add data for Wafer 1 with a new date
W2 <- rep(1, each=10)
ID2 <- rep(101, each=10)
Batch2 <- rep("A", each=10)
Date2 <- rep(as.Date("2001-04-11"), each=10)
MA2 <- rnorm(10, 5, 2)
MB2 <- rnorm(10, 5, 2)
df <- data.frame(Batch, Wafer, ID, MeasurementA, MeasurementB, Date)
ee <- data.frame(Batch2, W2, ID2, MA2, MB2, Date2)
colnames(ee) <- c("Batch", "Wafer", "ID", "MeasurementA", "MeasurementB", "Date")
# Data frame now how two sets of date for Wafer 1 on different dates
dd <- rbind(df, ee)
dd$Date <- factor(dd$Date)
# Create local connection (in reality this will be a connection to a host site)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbWriteTable(con, "dd", dd)
query <- function(...) dbGetQuery(con, ...)
# Create empty data frames to populate
wq = data.frame()
sq = data.frame()
shinyServer(function(input, output){
# create data frame to store reactive data set from query
values <- reactiveValues()
values$df <- data.frame()
# Action button for first query
d <- eventReactive(input$do, { input$wafer })
# First stage of reactive query
a <- reactive({ paste("Select ID from dd where Wafer=",d(), sep="") })
wq <- reactive({ query( a() ) })
# Output to confirm query is correct
output$que <- renderPrint({ a() })
output$pos <- renderPrint( wq()[1,1] )
# Action button to add results from query to a data frame
e <- eventReactive(input$do2, { wq()[1,1] })
b <- reactive({ paste("select cast(Wafer as varchar) as Wafer, cast(Batch as varchar) as Batch, MeasurementA, MeasurementB, Date from dd where ID=",e()," Order by ID asc ;", sep="") })
# observe e() so that data is not added until user presses action button
observe({
if (!is.null(e())) {
sq <- reactive({ query( b() ) })
# add query to reactive data frame
values$df <- rbind(isolate(values$df), sq())
}
})
asub <- eventReactive(input$do3,{subset(values$df, MeasurementA > input$Von[1] & MeasurementA < input$Von[2] )})
observeEvent(input$do4, {
values$df <- NULL
})
output$boxV <- renderPlot({
ggplot(asub(), aes_string('Wafer', input$char, fill='Batch')) + geom_boxplot()
})
})
De l'INTERFACE utilisateur
shinyUI(fluidPage(
titlePanel("Generic grapher"),
sidebarLayout(
sidebarPanel(
numericInput("wafer", label = h3("Input wafer ID:"), value = NULL),
actionButton("do", "Search wafer"),
actionButton("do2", "Add to data frame"),
actionButton("do3", "Show"),
actionButton("do4", "Clear"),
selectInput("char", label="Boxplot choice:",
choices = list("A"="MeasurementA", "B"="MeasurementB"),
selected="Von.fwd"),
sliderInput("Von", label = "A range:",
min=0, max=10, value=c(0,10), step=0.1)
),
mainPanel(
verbatimTextOutput("que"),
verbatimTextOutput("pos"),
plotOutput("boxV")
#dataTableOutput(outputId="posi")
)
)
)
)
Ci-dessus, si vous recherchez wafer "1" parcelles de toutes les données, même si il y a deux dates pour les gaufrettes 1 (c'est prévu). Donc je pensais que si, quand je clique sur "Recherche wafer" j'ai pu obtenir un popup si deux dates existait pour cette tranche. Jusqu'à présent j'ai lu ceci:
Ajouter une fenêtre d'erreur, d'avertissement à brillant
et ce:
Créer un menu contextuel avec un clic droit sur un objet
Qui montre que je peux produire un message d'avertissement (bien que je n'ai pas essayé de faire ce encore). Mais je me demande si il ya un moyen de rendre le pop-up interactif pour choisir la date souhaitée. Peut-être que je devrais contacter le créateur de shinyBS, qui ressemble à ma meilleure option?
OriginalL'auteur Pete900 | 2015-08-26
Vous devez vous connecter pour publier un commentaire.
Vous pourriez peut-être utiliser un conditionalPanel pour que:
http://shiny.rstudio.com/reference/shiny/latest/conditionalPanel.html
Je pensais que vous pourriez utiliser le conditionalPanel seulement sur un selectInput avec les dates choisies de la plaquette. Le conditionalPanel serait de masquer cette entrée si il y avait moins de deux dates pour la gaufrette.
ahhh je vois. Donc, juste pour être clair, j'aurais une requête d'une plaquette. Si il n'y avait qu'une seule date, il n'y aurait pas de panneau de saisie. Cependant, s'il y avait deux dates, puis le panneau de saisie apparaît, puis laissez-moi choisir une date pour la construction de la trame de données? J'aime cette idée.
Exactement. Vous voudrez peut-être lire à propos de session$clientData trop. Vous pouvez l'utiliser pour vérifier si ledit panneau est caché ou non, et le sous-ensemble de vos données en conséquence.
OriginalL'auteur user5029763
J'ai créé un exemple d'Application qui devrait vous donner une bonne introduction sur la façon dont vous pouvez utiliser les Alertes. Je ne suis pas en utilisant les alertes de
shinyBS
paquet comme vous pouvez le voir, mais au lieu de cela j'ai utilisésession$sendCustomMessage
d'envoyer un message avec JSalert
fonctionnalité. J'ai ajouté des commentaires dans le code pour avoir un regard. Remarque que je me sers de lasub
fonction pour créer le texte de votre choix en remplaçant mon expression dans le quelque CHOSE partie de la chaîne.La sortie ci-dessous de certains pop-ups est en
IE
,Google Chrome
sera différent:#1 Curseur de plus de 100 alerte
#2 Dates: Aujourd'Hui Sélectionné
#3 Dates: il suffit d'alerte par l'impression de la date
#4 Alerte pour montrer que le curseur est encore plus de 100
#5 Si le curseur est à moins de 100, vous obtenez tableoutput
Juste un commentaire qu'au lieu d'utiliser
session$sendCustomMessage(type='jsCode', list(value = js_string))
, vous pouvez utiliser le shinyjs paquet pour afficher la boîte d'alerte avec un simpleshinyjs::info("Hello!")
Merci pour vos conseils daattali. Je vais lire sur le paquet
Est-il possible de créer une fenêtre pop-up avec un bouton d'action (ou une valeur de retour pour le serveur une fois "ok" est sur le allert pop-up est cliqué)?
jetez un oeil à ma réponse ici avec
modal
de mise en œuvre de stackoverflow.com/questions/31107645/...OriginalL'auteur Pork Chop