Shiny
Shiny
Hallo,
ich wollte mal kurz in die Runde fragen ob es jemanden gibt, welcher Erfahrungen im Umgang mit Shiny hat. Ich habe erste Erfahrungen gesammelt, stecke jetzt aber in der Umsetzung meiner Ideen fest.
Vielleicht gibt es jemanden, welcher mir aus meiner Sackgasse raushelfen kann?
Würde mich sehr freuen!
Viele Grüße,
reteo
ich wollte mal kurz in die Runde fragen ob es jemanden gibt, welcher Erfahrungen im Umgang mit Shiny hat. Ich habe erste Erfahrungen gesammelt, stecke jetzt aber in der Umsetzung meiner Ideen fest.
Vielleicht gibt es jemanden, welcher mir aus meiner Sackgasse raushelfen kann?
Würde mich sehr freuen!
Viele Grüße,
reteo
Re: Shiny
Ja hab ich.ich wollte mal kurz in die Runde fragen ob es jemanden gibt, welcher Erfahrungen im Umgang mit Shiny hat.
Erstelle eine Frage mit einem reproduzierbaren Beispiel und dann wird sich (hoffentlich) jemand finden der dir helfen kann.Vielleicht gibt es jemanden, welcher mir aus meiner Sackgasse raushelfen kann?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Shiny
Hab vielen Dank,
Das wäre cool,
ich setz mich mal an mein Problem und hoffentlich kann ich ein gut nachvollziehbares Beispiel reproduzieren. Ich melde mich wieder sobald ich es hingekriegt habe.....ist nicht ganz so schnell und einfach zu bewerkstelligen.
Nochmals Danke.
Das wäre cool,
ich setz mich mal an mein Problem und hoffentlich kann ich ein gut nachvollziehbares Beispiel reproduzieren. Ich melde mich wieder sobald ich es hingekriegt habe.....ist nicht ganz so schnell und einfach zu bewerkstelligen.
Nochmals Danke.
Re: Shiny
Hallo,
erstmal vielen Dank für dein Angebot mir zu helfen. Ich habe sehr wenig oder gar keine Erfahrungen mit Shiny. Die gezeigten Codes habe ich mir ausnahmslos selbst beigebracht bzw. aus Code schnipseln aus dem Netz zusammengestellt.
Worum geht es?
Ich möchte für mich und zukünftige Projekte ein Shiny Dashboard erstellen, in dem die ersten Schritte in deskriptiver Statistik an einem konkreten Projekt durchgeführt werden. Dazu zählt u.a. Einlesen, Manipulation, Speichern in verschiedene Dateiformate und den anschließenden Export von beliebigen Datensätzen aus Excel. Im nächsten Schritt die wichtigsten Schritte in deskriptiver Statistik u.a. Boxplots, Histogramm, Dichtekurve sowie den Export der Grafiken (svg, pdf, png, jpg). Im nächsten Schritt sollte dann erste Regressionen sowie Korrelationen und Korrelationsmatrix möglich sein.
In ferner Zukunft wäre es großartig auch multivariate Analysen erstellen zu können. Hierzu habe ich sogar ein komplettes Script im Netz gefunden.
Wo stehe ich?
Zurzeit habe ich nach Vorlagen bzw. den erwähnten Code Schnipseln erste Dashboards erstellen können. Leider tauchen immer wieder Fehlermeldungen auf bei denen ich aufgrund meiner mangelnden Erfahrung bzw. Programmierkenntnisse nicht weiterkomme.
1. Schritt
Einlesen und Manipulation von Datensätzen:
Im ersten Beispiel sieht man das Dashboard mit der Überschrift und den 3 Tabs. Erster Schritt ist das Einlesen von Datensätzen. Die Codezeilen hierfür funktionieren nur für das Einlesen des xlsx Datensatzes. Trotz intensiver Suche habe ich keinen Weg gefunden andere Datenformate (csv, txt) zu importieren. Sobald ich ein anderes Datenformat als xlsx wähle kommt Fehlermeldung:
Evaluation error: zip Datei
Warnung: Error in : Evaluation error: zip Datei 'C:\Users\XXX\AppData\Local\Temp\RtmpkNXK95\9824fca6478120dfec9344ea\0.txt.xlsx' kann nicht geöffnet werden.
110: <Anonymous>
Aber es liegt gar keine zip Datei vor! Meine konkrete Frage und Bitte um Hilfe lautet nun, wie kann ich andere Datenformate als xlsx in Shiny importieren. Damit ich erstmal eine Grundlage zum Weitermachen habe.
Hier nun der Code! Relevant ist dieser erstmal nur bis Zeile Nr. 43 dort muss Fehler Nr. 1. Hier wäre fürste Erste schon mal viel geholfen. Im Anhang ist eine Beispieldatei als csv, txt mit dabei
Für die xlsx Datei überschreite ich wohl die maximale Dateigröße!
Vielleicht findet sich jemand, der mir bei der Verwirklichung des Projektes helfen könnte und ich bin über jede Hilfe und Hinweis dankbar!
Vielen Dank & frohe Ostern,
retep
erstmal vielen Dank für dein Angebot mir zu helfen. Ich habe sehr wenig oder gar keine Erfahrungen mit Shiny. Die gezeigten Codes habe ich mir ausnahmslos selbst beigebracht bzw. aus Code schnipseln aus dem Netz zusammengestellt.
Worum geht es?
Ich möchte für mich und zukünftige Projekte ein Shiny Dashboard erstellen, in dem die ersten Schritte in deskriptiver Statistik an einem konkreten Projekt durchgeführt werden. Dazu zählt u.a. Einlesen, Manipulation, Speichern in verschiedene Dateiformate und den anschließenden Export von beliebigen Datensätzen aus Excel. Im nächsten Schritt die wichtigsten Schritte in deskriptiver Statistik u.a. Boxplots, Histogramm, Dichtekurve sowie den Export der Grafiken (svg, pdf, png, jpg). Im nächsten Schritt sollte dann erste Regressionen sowie Korrelationen und Korrelationsmatrix möglich sein.
In ferner Zukunft wäre es großartig auch multivariate Analysen erstellen zu können. Hierzu habe ich sogar ein komplettes Script im Netz gefunden.
Wo stehe ich?
Zurzeit habe ich nach Vorlagen bzw. den erwähnten Code Schnipseln erste Dashboards erstellen können. Leider tauchen immer wieder Fehlermeldungen auf bei denen ich aufgrund meiner mangelnden Erfahrung bzw. Programmierkenntnisse nicht weiterkomme.
1. Schritt
Einlesen und Manipulation von Datensätzen:
Im ersten Beispiel sieht man das Dashboard mit der Überschrift und den 3 Tabs. Erster Schritt ist das Einlesen von Datensätzen. Die Codezeilen hierfür funktionieren nur für das Einlesen des xlsx Datensatzes. Trotz intensiver Suche habe ich keinen Weg gefunden andere Datenformate (csv, txt) zu importieren. Sobald ich ein anderes Datenformat als xlsx wähle kommt Fehlermeldung:
Evaluation error: zip Datei
Warnung: Error in : Evaluation error: zip Datei 'C:\Users\XXX\AppData\Local\Temp\RtmpkNXK95\9824fca6478120dfec9344ea\0.txt.xlsx' kann nicht geöffnet werden.
110: <Anonymous>
Aber es liegt gar keine zip Datei vor! Meine konkrete Frage und Bitte um Hilfe lautet nun, wie kann ich andere Datenformate als xlsx in Shiny importieren. Damit ich erstmal eine Grundlage zum Weitermachen habe.
Hier nun der Code! Relevant ist dieser erstmal nur bis Zeile Nr. 43 dort muss Fehler Nr. 1. Hier wäre fürste Erste schon mal viel geholfen. Im Anhang ist eine Beispieldatei als csv, txt mit dabei
Code: Alles auswählen
library(shinythemes)
library(DT)
library(readxl)
library(shinyWidgets)
library(ggplot2)
library(tidyverse)
ui = (navbarPage("Statistical Evaluation", collapsible = TRUE, inverse = TRUE, theme = shinytheme("spacelab"),
tabPanel
(
"Select Data a data set",
sidebarLayout
(
sidebarPanel
(tags$head(tags$script('
Shiny.addCustomMessageHandler("myCallbackHandler",
function(typeMessage) {console.log(typeMessage)
if(typeMessage == 1){
console.log("got here");
$("a:contains(Upload a file)").click();
}
});
')),
h3("Upload a data set"),
fileInput("file1", "Choose a File",
multiple = FALSE,
accept = c("text/csv",
"text/comma-separated-values,text/plain",
".csv", ".xlsx")),
# Input: Select separator ----
radioButtons("sep", "Separator",
choices = c(Semicolon = ";",
Comma = ",",
Tab = "\t",
Excel = ""),
selected = ","),
# Input: Select number of rows to display ----
radioButtons("disp", "Display",
choices = c(Head = "head",
All = "all"),
selected = "head"),
),
#column(7,dataTableOutput('dto')),
# Input: Select number of rows to display ----
# each item within the sidebar
# each table or output has to be on the same sidebarPanel or mainPanel
mainPanel(
DTOutput('contents')),
#plotOutput("plot")),
)
# next tab
),
tabPanel
(
"Depth Ranking Plot",
sidebarLayout
(
sidebarPanel
(
selectizeInput("elementInput", "Variable",
choices = unique(Data1$Element),
selected="", multiple =TRUE),
selectInput("select a age", label = "Age",choices = unique(Data1$Age),
selected="", multiple =TRUE),
helpText (strong("for multiple choices hold Strg button" )),
br(),
#dateRangeInput("dates", label = h3("Select depth range")),br(),,
numericRangeInput(inputId = "noui1", label = "Depth Range",
value = c(150, 400)), br(),
actionButton("action", label = "Proceed with select depth"),
br(),
# download selected data
h5 (strong("Download")),
downloadButton("downloadData", "Download brushed data"),
h5(strong("Brushed points appear here")),
tableOutput("data_brush")
),
# outputs
mainPanel(
plotOutput("depth", brush = brushOpts(id = "plot_brush", resetOnNew = FALSE,
fill = "red", stroke = "#036", opacity = 0.3)),
verbatimTextOutput("info"),
#fluidRow(
# left side actual dataset and right side the rows for datapoints selected by brush
# defined the width of each column and also some styling (bold & italics) using tags
#column(width = 5, tags$b(tags$i("Actual Dataset")), tableOutput("data")),
#column(width=5, tags$b(tags$i("Rows corresponding to datapoints under brush")), tableOutput("data_brush"))
),
)
# next tab
),
tabPanel(
"Univariate Data Description and Visualization",
sidebarLayout
(
sidebarPanel
(
selectizeInput("elementInput", "Choose a Variable",
choices = unique(Data1$Element),
selected="", multiple =TRUE),
selectizeInput("ageInput", "Choose a Age",
choices = unique(Data1$Age),
selected="", multiple =TRUE)),
sliderInput("slider", "Choose a Range", 300, 500,
value = c(300, 500), step = 10)),
selectizeInput("statinput", "Choose a Plot",
selected = "", choice =c ("Boxplot",
"Frequency Histogram" ,
"QQ Normal Plot",
"Jitter Boxplot")),
# output
mainPanel(
tabsetPanel(
tabPanel("Plot", plotOutput("plot")),
tabPanel("Summary", verbatimTextOutput("summary")),
tabPanel("Table", tableOutput("table")),
verbatimTextOutput("info")),
)
)
))
# Show a plot of the generated distribution
#mainPanel(
#column(width = 6,
#plotOutput("depth")))
##########################################################################
#tabsetPanel(type = "tabs",
# tabPanel("Plot", plotOutput("plot")),
# tabPanel("Summary", verbatimTextOutput("summary")))
#tabPanel("Table", tableOutput("table"))
# Define server logic to read selected file ----
server <- function(input, output) {
output$contents <- renderDT({
inFile <- input$file1
if(is.null(inFile))
return(NULL)
file.rename(inFile$datapath,
paste(inFile$datapath, ".xlsx", sep=""))
read_excel(paste(inFile$datapath, ".xlsx", sep=""), 1)
})
# Reactive expression with the data, in this case iris
#the data <- reactive(inFile)
#the extensions parameter coupled with the options list does the trick
# output$dto <- renderDataTable(thedata(), extensions = 'Buttons',
#options = list(dom = 'Bfrtip',
#buttons = c('copy', 'csv', 'excel', 'pdf', 'print'))
#)
output$plot <- renderPlot({
plot(Data1$Value, type=input$statinput)
})
output$summary <- renderPrint({
summary(Data1$Element)
})
output$depth <- renderPlot({
Data1%>%
select(Age, Depth, Element, Value)%>%
filter (Element %in% c("TOC", "TS", "S1", "S2", "S3", "Tmax", "HI", "OI"))%>%
#filter(Age %in% c("-Bartonian to Priabonian", "-Ypresian to Lutetian",
#"-Campanian", "-Turonian", "-Santonian", "Coniacian"))%>%
ggplot(aes(x= Depth, y= Value, color = Element, na.rm = TRUE))+
geom_line()+ geom_point()+
#scale_x_reverse()+
coord_flip()+
scale_x_reverse(limits = c(400, 100),
breaks = seq(400, 100, by = -50))+
facet_wrap(. ~ Element, scales = 'free_x', nrow = 1)+
scale_color_brewer(palette="Paired", guide = FALSE)+
#scale_x_discrete()
scale_y_continuous()+
labs(title = "Depth plot",
subtitle = "Predictive mean mapping\
Eratosthenes seamount (ODP Leg-160), Organic Measurments, N = 121",
caption = "Data source: Core 966-F, 967-A,E",
#x = "Ge [ppm]", y = expression(Fe[2]*O[3]),"[ppm]",
x= "Depth [m]",
#y = expression(Si*O[2] * "[%]"), x= "Depth [m]",
tag = "")+
theme_bw(base_size = 15)+
theme(axis.text.x=element_text(size=rel(0.5)))+
theme(axis.title.x=element_blank())
})
# brushedPoints returns the row of data under the brush
# brush information comes from ui to server using brushId and can be accessed using input$brushId
output$data_brush <- renderTable({
n = nrow(brushedPoints(Data1, brush = input$plot_brush)) # row count will be 0 when no selection made by the brush
if(n==0)
return()
else
brushedPoints(Data1, brush = input$plot_brush) # return rows
# argument allRows = TRUE can also be used
## It will add another column (selected_) to the actual dataset. True indicates that data point
# corresponding to that row was under the brush. False means data corresponding to that row wasn't selected by brush
})
}
shinyApp(ui = ui, server = server)
Vielleicht findet sich jemand, der mir bei der Verwirklichung des Projektes helfen könnte und ich bin über jede Hilfe und Hinweis dankbar!
Vielen Dank & frohe Ostern,
retep
- Dateianhänge
-
- All_Data.txt
- (8.01 KiB) 137-mal heruntergeladen
-
- All_Data.csv
- (8.01 KiB) 113-mal heruntergeladen
Re: Shiny
Aber es liegt gar keine zip Datei vor! Meine konkrete Frage und Bitte um Hilfe lautet nun, wie kann ich andere Datenformate als xlsx in Shiny importieren. Damit ich erstmal eine Grundlage zum Weitermachen habe.
Code: Alles auswählen
read_excel(paste(inFile$datapath, ".xlsx", sep=""), 1)
Entweder, anhand des Dateitypes verschiedene einlese funktionen wählen, hier pseudo code
Code: Alles auswählen
switch(type,
xsls = read_excel(path),
csv = read.csv(path),
<andere formate>
)
oder du nutzt ein schon fertiges modul: https://github.com/dreamRs/datamods
Ich würde dir raten,wenn das eine öfters genutzte Anwendung werden soll, den Code-Stil zu überdenken und vielleicht das ganze in Modulen oder einem Paket umzuorganisieren. Auch für dein späteres Ich.
Hier zwei top ressourcen zum lernen: https://mastering-shiny.org/scaling-intro.html https://engineering-shiny.org/
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Shiny
Hi ,
hab erstmal vielen Dank! Die Links sowie die kurzen Berichtigungen sind super! Ich werde sofort probieren! Was meinen Code betrifft gebe ich Dir voll und ganz Recht! Aber so ist das nun mal wenn ich mir alles selbst beibringe. Dann sieht es für einen Profi natürlich nicht schön aus! Betreffs der Module hast du auch Recht! Ich habe mir schon für jedes Thema ein Mini Script zurecht gelegt. Aber auch da komme ich nicht weiter. Und das nagt dann an der Motivation!
Nun habe ich mir in den Kopf gesetzt mir sowas zu basteln - dann hoffe ich auch - das ich das durchziehe.
Ich melde mich, wenn ich nicht weiter weiß!
Nochmals Danke für die schnelle und hilfreiche Reaktion!
Gruß
retep
hab erstmal vielen Dank! Die Links sowie die kurzen Berichtigungen sind super! Ich werde sofort probieren! Was meinen Code betrifft gebe ich Dir voll und ganz Recht! Aber so ist das nun mal wenn ich mir alles selbst beibringe. Dann sieht es für einen Profi natürlich nicht schön aus! Betreffs der Module hast du auch Recht! Ich habe mir schon für jedes Thema ein Mini Script zurecht gelegt. Aber auch da komme ich nicht weiter. Und das nagt dann an der Motivation!
Nun habe ich mir in den Kopf gesetzt mir sowas zu basteln - dann hoffe ich auch - das ich das durchziehe.
Ich melde mich, wenn ich nicht weiter weiß!
Nochmals Danke für die schnelle und hilfreiche Reaktion!
Gruß
retep
Re: Shiny
Hallo,
wie angekündigt, wenn ich nicht weiter weiß, würde ich gerne nochmal in die Runde fragen. Nachdem ich die Hilfeseiten und Empfehlungen von Edi zu Rate gezogen habe, baue ich meine Codes komplett neu auf.
Das aktuelle Problem, ich bekomme keinen Fehler angezeigt aber auch keinen Plot! Kann mir jemand sagen warum es keinerlei Reaktion von Shiny gibt?
Hier ist der Code:
Vielen Dank für die Hilfe & Unterstützung!
retep
wie angekündigt, wenn ich nicht weiter weiß, würde ich gerne nochmal in die Runde fragen. Nachdem ich die Hilfeseiten und Empfehlungen von Edi zu Rate gezogen habe, baue ich meine Codes komplett neu auf.
Das aktuelle Problem, ich bekomme keinen Fehler angezeigt aber auch keinen Plot! Kann mir jemand sagen warum es keinerlei Reaktion von Shiny gibt?
Hier ist der Code:
Code: Alles auswählen
ui <- fluidPage(
plotOutput("my_depth_plot"),
selectizeInput("elementInput", "Variable",
choices = unique(Data1$Element),
selected="", multiple =TRUE),
sliderInput(inputId = "Depth",
"Select Min and Max",
min = 100,
max=400,
value = 100)
)
server <- function(input, output) {
my_depth_plot <- reactive({
Data1 %>%
filter(Depth >
input$Depth)
})
renderPlot({
ggplot(my_depth_plot ()) +
aes_string(
x="Depth",
y="Value",
color= input$Element) +
geom_point()+geom_line()+
coord_flip()+
facet_wrap(. ~ Element, scales = 'free_x', nrow = 1)+
scale_color_brewer(palette="Paired", guide = FALSE)+
scale_x_reverse(limits = c(400, 100),
breaks = seq(400, 100, by = -50))
})
}
shinyApp(ui = ui, server = server)
Vielen Dank für die Hilfe & Unterstützung!
retep
- Dateianhänge
-
- Data1.txt
- (7.57 KiB) 117-mal heruntergeladen
Re: Shiny
output$my_depth_plot <- renderPlot
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Re: Shiny
Hallo Edi,
hab vielen Dank für`s drüber gucken! Solch ein Fehler ist ein bisschen peinlich! Sei`s drum. Ich hab den Fehler berichtigt. Aber jetzt kommt zumindest eine Fehlermeldung:
Fehler in sliderInput(inputId = "Depth", "Select Min and Max", choices = unique(Data1$Depth), : unbenutztes Argument (choices = unique(Data1$Depth))
und weiter :
Warnung: Error in filter: Objekt 'Depth' nicht gefunden
Das verstehe ich nicht! Ich habe doch die Variable korrekt adressiert. Und die Datei enthält die Variable "Depth"! Oder ist das Argument "choices" falsch?
Kann es auch daran liegen dass ich keinen x/y Plot machen will (im weitesten Sinn ist es ja trotzdem ein x/y Plot) - also der Datensatz im Breitformat vorliegt, stattdessen benutze ich das Lange Format um den Tiefenplot als Facet darzustellen. Und Shiny kennt sowas nicht? Kann das sein, dass Shiny nicht in der Lage ist Dateien im "Long Format zu verarbeiten und die Plots im Anschluss als Facets darzustellen?
Vielen Dank für deine Hilfe!
retep
hab vielen Dank für`s drüber gucken! Solch ein Fehler ist ein bisschen peinlich! Sei`s drum. Ich hab den Fehler berichtigt. Aber jetzt kommt zumindest eine Fehlermeldung:
Fehler in sliderInput(inputId = "Depth", "Select Min and Max", choices = unique(Data1$Depth), : unbenutztes Argument (choices = unique(Data1$Depth))
und weiter :
Warnung: Error in filter: Objekt 'Depth' nicht gefunden
Das verstehe ich nicht! Ich habe doch die Variable korrekt adressiert. Und die Datei enthält die Variable "Depth"! Oder ist das Argument "choices" falsch?
Kann es auch daran liegen dass ich keinen x/y Plot machen will (im weitesten Sinn ist es ja trotzdem ein x/y Plot) - also der Datensatz im Breitformat vorliegt, stattdessen benutze ich das Lange Format um den Tiefenplot als Facet darzustellen. Und Shiny kennt sowas nicht? Kann das sein, dass Shiny nicht in der Lage ist Dateien im "Long Format zu verarbeiten und die Plots im Anschluss als Facets darzustellen?
Vielen Dank für deine Hilfe!
retep
Re: Shiny
ist eigentlich eindeutig: sliderInput hat kein choices= Argument. Auch sehe ich nicht wo Data1 definiert ist. Kein reproduzierbares Beispiel...Fehler in sliderInput(inputId = "Depth", "Select Min and Max", choices = unique(Data1$Depth), : unbenutztes Argument (choices = unique(Data1$Depth))
Kein reproduzierbares Beispiel. Ich vermute du willst filter aus dem dplyr Paket nutzen, dass ich aber nirgends sehe. Ich hab mir angewöhnt Funktionen aus Paketen explizit zu adressieren: dplyr::filterWarnung: Error in filter: Objekt 'Depth' nicht gefunden
Nein, nein nein. Das hat nichts mit shiny zu tun... Am besten schreibst du den code mal als skript/funktion mal ganz ohne shiny...Kann es auch daran liegen dass ich keinen x/y Plot machen will (im weitesten Sinn ist es ja trotzdem ein x/y Plot) - also der Datensatz im Breitformat vorliegt, stattdessen benutze ich das Lange Format um den Tiefenplot als Facet darzustellen. Und Shiny kennt sowas nicht? Kann das sein, dass Shiny nicht in der Lage ist Dateien im "Long Format zu verarbeiten und die Plots im Anschluss als Facets darzustellen?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.
Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
.