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.
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. –
Können Sie Ihren aktualisierten Code posten? –