Ich stelle ein einfaches Reporting-System zusammen, aber ich stürze mich in die erste Hürde und versuche, dies in Shiny anstatt meiner üblichen Route von Python/PHP.R & Shiny - Aktualisierung der dynamischen Anzahl der reaktiven Plots einmal dynamisch generiert
Hier ist, was ich bisher habe:
library(shiny)
library(ggplot2)
library(googleAnalyticsR)
server <- function(input, output) {
id <- 'XXXXXXX'
#dynamically create the right number of output
output$plots <- renderUI({
web_data <- google_analytics_4(id,
date_range = c(format(input$dates[1]), format(input$dates[2])),
metrics = c("sessions","pageviews","bounces"),
dimensions = c("date", "channelGrouping"),
anti_sample = TRUE)
plot_output_list <- lapply(unique(web_data$channelGrouping), function(i) {
plotname <- paste0("plot", i)
plotOutput(plotname)
})
tagList(plot_output_list)
})
for (channel in unique(web_data$channelGrouping)) {
local({
plotname <- paste0("plot", channel)
localChannel <- channel
filtered_data <- subset(web_data, channelGrouping == channel, select=-channelGrouping)
filtered_data.long <- melt(filtered_data, id.vars='date')
output[[plotname]] <- renderPlot({
ggplot(filtered_data.long, aes(date, value, color=variable))+ggtitle(localChannel)+geom_line()
})
})
}
}
ui <- fluidPage(
titlePanel("XXXXXX Reporting"),
sidebarLayout(
sidebarPanel(
uiOutput("choose_view"),
dateRangeInput("dates", "dates")
),
mainPanel(
uiOutput("plots")
)
)
)
shinyApp(ui = ui, server=server)
Die Frage, wie ich glaube, in der Platzierung der für Schleife. Wenn ich es dort platziere, wo es oben ist, scheint es keinen Zugriff auf web_data
zu haben. Wenn ich es in den Block output$plots
platziere, dann scheint es, dass tagList
nicht auf der Benutzeroberfläche ausgegeben wird. Ich bin sicher, ich vermisse etwas am Zielfernrohr oder ähnlichem, aber ich habe es jetzt zu lange angeguckt!
EDIT nach Shayne03 Antwort:
ich folgendes jetzt haben, die näher an Arbeits scheint:
output$plots <- renderUI({
plot_output_list <- lapply(unique(web_data()$channelGrouping), function(i) {
plotname <- paste0("plot", i)
plotOutput(plotname)
})
})
reactive({
for (channel in unique(web_data()$channelGrouping)) {
local({
plotname <- paste0("plot", channel)
localChannel <- channel
filtered_data <- subset(web_data(), channelGrouping == channel,
select=-channelGrouping)
filtered_data.long <- melt(filtered_data, id.vars='date')
output[[plotname]] <- renderPlot({
ggplot(filtered_data.long, aes(date, value,
color=variable))+ggtitle(localChannel)+geom_line()
})
})
}
})
web_data<-reactive({
#get the GA data, between the dates specified by user
google_analytics_4(id,
date_range = c(format(input$dates[1]),
format(input$dates[2])),
metrics = c("sessions","pageviews","bounces"),
dimensions = c("date", "channelGrouping"),
anti_sample = TRUE)
})
Wenn ich den Code genau so haben, die Grundstücksflächen sind ausgegeben der HTML-Code, aber keine Grafiken. Ich habe versucht, aufgrund meines mangelnden Verständnisses den reaktiven Block in den renderUI-Block zu setzen, bekam aber einen Zwangsfehler. Ich bin mir sicher, dass es jetzt ein Tippfehler oder etwas ist, irgendwelche Ideen?
Danke, das hat mir die Nähe, aber nicht ganz da. Ich habe bearbeitet, jede Chance, du könntest noch einen Blick darauf werfen? –