2017-11-28 1 views
1

Ich habe vor kurzem begonnen zu arbeiten glänzend, für meine Schule Projekt Ich entwickle eine Shiny-Anwendung, die das Diagramm mit ggplot auf ausgewählte Eingaben plotten.Plot aus verschiedenen Datasets auf verschiedenen Eingaben mit Bedingungsanweisung

Jetzt ist eine meiner Anforderungen, dass ich bei der Auswahl bestimmter Eingaben im Front-End den Graph mit bestimmten Datensätzen plotten muss. Sagen wir, ich 3 verschiedene Datensätze haben, und 4 Eingänge dann

if(input$A = 1 && input$B = 2 && input$C = 3 && input$D = 4){ 
    //Plot using Dataset1 
} 
else if(input$A = 1 && input$B = 2 && input$C = 3 && input$D = 4){ 
    //Plot using Dataset2 
} 
else if(input$A = 2 && input$B = 3 && input$C = 4 && input$D = 4){ 
    //Plot using Dataset3 
} 

ich, dass herausgefunden für diese Art von Logik zu arbeiten, ich eine Schaltfläche in Form einreichen müssen, ich habe Online ein paar Beispiele geprüft , aber dint richtig verstehen, wie man es in meinem Fall anwendet.

Jetzt, wenn ich versuche, die Daten mit If Bedingung mit reaktiven wie unten zu plotten, bekomme ich Error:could not find function "g" Was mache ich hier falsch? und wie kann ich diese Informationen auf die Submit-Schaltfläche übertragen?

Ich würde es begrüßen, wenn Sie bitte einen Blick auf meinen Code unten und helfen Sie mir.

Hier ist ein sample dataset Sie das Beispiel verwenden können, um zu reproduzieren -

UI.R

library(shiny) 
library("RMySQL") 
library(ggplot2) 
library(plotly) 
# Database Connection and the fetch 
dataset <- read.csv("dataset.csv", header=TRUE) 
dataset$X <- NULL 
dataset$sex <- sub("^$", "Unknown", dataset$sex) 

fluidPage(
    fluidRow(
    tags$head(
     tags$style(HTML(" 
     .shiny-output-error-validation { 
     color: #48ca3b; 
     font-size: 14pt; 
     } 
     body { 
     -moz-transform: scale(0.9, 0.9); /* Moz-browsers */ 
     zoom: 0.9; /* Other non-webkit browsers */ 
     zoom: 90%; /* Webkit browsers */ 
     } 
    ")) 
    ), 
    titlePanel("Define census"), 

    sidebarPanel(

    dateRangeInput('dateRange', 
        label = 'Date Input', 
        start = as.Date("1967-01-01"), end = Sys.Date()), 

    selectInput("region", label = "Region", 
       choices = c("All",levels(dataset$region)), 
       selected = "ANI"), 

    selectInput("species", label = "Species", 
       choices = c("All",levels(dataset$species)), 
       selected = "ANI"), 

    selectInput("sex", label = "Sex", 
       choices = unique(dataset$sex), multiple = TRUE, 
       selected = unique(dataset$sex)), 

    radioButtons(
     "standard_cat_options", 
     label="Standard Category", 
     choices=list(
     "All", 
     "Multiple Select"), selected="All"), 
    conditionalPanel(
     condition = "input.standard_cat_options != 'All'", 
     selectInput(
     'standard_cat', 
     label = "Select categories", multiple = TRUE, 
     choices=unique(dataset$standard_cat) 
    ) 
    ), 

    radioButtons(
     "age_cat_options", 
     label="Age Category", 
     choices=list(
     "All", 
     "Multiple Select"), selected="All"), 
    conditionalPanel(
     condition = "input.age_cat_options != 'All'", 
     selectInput(
     'broad_cat', 
     label = "Select age category", multiple = TRUE, 
     choices=c("adult", "adjuv", "juv", "pup", "orphan", "W", "YOY", "SA1", "SA2", "SA3", "SA4", "SA5", "SA", "mature", levels(dataset$broad_cat)) 
    ) 
    ), 

    selectInput('x', 'X', names(dataset), names(dataset)[[2]]), 

    selectInput('y', 'Y', names(dataset), names(dataset)[[8]]), 

    submitButton("Submit") 
    ), 
    mainPanel(
    column(12, plotlyOutput("plot1")), 
    hr(), 
    column(12, plotlyOutput("plot2")) 
    ) 
) 
) 


Aktualisiert Server.R

library(ggplot2) 
library("RMySQL") 
library("mgcv") 
library(plotly) 
function(input, output) { 

# Database Connection and the fetch 
    dataset <- read.csv("dataset.csv", header=TRUE) 

    dataset$X <- NULL 
    dataset$sex <- sub("^$", "Unknown", dataset$sex) 

    # dataset1 <- read.csv("dataset1.csv", header = TRUE, fill = TRUE) 
    # dataset2 <- read.csv("dataset2.csv", header = TRUE, fill = TRUE) 
    # dataset3 <- read.csv("dataset3.csv", header = TRUE, fill = TRUE) 

# DataBase disconnected 
# Using the datafram created with name data 
# as in the given data Date is of String type so converted to "Date" type 

dataset$date <- as.Date(dataset$date) 

#reactive variable initiation for the various inputsinstall.packages('rsconnect') 

reactive({ 
#if(input$region == "ANI" && input$species == "Ej" && input$sex == "Unknown" && input$standard_cat == "All" && input$broad_cat == "YOY"){ 

if(input$region == "ANI"){ 
    l <- subset(dataset, region %in% input$region) 

    k <- subset(l(), date >= as.Date(input$dateRange[1]) & date <= as.Date(input$dateRange[2])) 

    m <- subset(k(), species %in% input$species) 

    n <- subset(m(), sex %in% input$sex) 

    o <- subset(n(), standard_cat %in% input$standard_cat) 

    g <- subset(o(), broad_cat %in% input$broad_cat) 
    } 
}) 

#output plots 

    output$plot1 <- renderPlotly({ 
    p <- ggplot(g(), aes_string(x=input$x, y=input$y)) + geom_point(alpha=0.4) 
    ggplotly(p) 
    }) 
    output$plot2 <- renderPlotly({ 
    q <- ggplot(g(), aes_string(x=input$x, y=input$y)) + geom_smooth() 
    ggplotly(q) 
    }) 
} 

Danke.

Antwort

0

Ich sehe nicht, warum Sie alle diese reaktiven Ausdrücke innerhalb eines anderen reaktiven Ausdruckes einpacken müssen. Ich würde es entfernen. Ich glaube auch nicht, dass Sie diese reaktiven Ausdrücke von Anfang an brauchen, wenn ich verstehe, was Sie hier erreichen wollen. Mit jeder Eingabe von der Benutzeroberfläche können Sie die Standardeingabe festlegen. Ich würde dies tun, anstatt zu validieren, dass jede Eingabe einen Wert hat. Dies sollte auch die Notwendigkeit einer Schaltfläche zum Senden entfernen.

+0

Hallo Alex, danke für das Feedback, ich habe versucht, die reaktiven Ausdrücke wie vorgeschlagen zu entfernen. Aber ich sehe mich wieder denselben Fehler an. –

+0

Können Sie Ihren aktualisierten Code posten? –

Verwandte Themen