dinámicamente agregue gráficos a la página web usando shiny

Quiero crear una aplicación con brillos que agregue diagtwigs dinámicamente a la página. podrían ser 10 plots y podría ser solo una. Estoy usando este tutorial en la shiny página de inicio para la interfaz de usuario dinámica.

este es un ejemplo simplificado. la función showme está trazando el gráfico

server.r

 shinyServer(function(input, output) { # Create an environment for storing data symbol_env <- new.env() # Make a chart for a symbol, with the settings from the inputs make_chart <- function(symbol) { showme(symbol) } display <- c("1083484" , "1101732") output$MyList <- renderUi({ for (i in i:nrow(display)) renderPlot({make_chart(display[i])}) }) }) 

ui.r

 shinyUI(pageWithSidebar( headerPanel("My Plots !"), sidebarPanel( wellPanel( p(strong("Scan1")))) ,mainPanel( uiOutput("MyList") ))) 

recibo el siguiente error

 Listening on port 8100 Error in .subset2(x, "impl")$defineOutput(name, value, deparse(substitute(value))) : Unexpected character output for display 

si este no es el camino, agradecería cualquier orientación. Gracias.

 > sessionInfo() R version 2.15.3 (2013-03-01) Platform: i386-w64-mingw32/i386 (32-bit) 

Quizás este ejemplo debido a Winston Chang es útil:

Brillante aplicación de ejemplo con número dynamic de plots

Aquí está el ejemplo completo solo en caso de linkrot:

servidor.R

 max_plots < - 5 shinyServer(function(input, output) { # Insert the right number of plot output objects into the web page output$plots <- renderUI({ plot_output_list <- lapply(1:input$n, function(i) { plotname <- paste("plot", i, sep="") plotOutput(plotname, height = 280, width = 250) }) # Convert the list to a tagList - this is necessary for the list of items # to display properly. do.call(tagList, plot_output_list) }) # Call renderPlot for each one. Plots are only actually generated when they # are visible on the web page. for (i in 1:max_plots) { # Need local so that each item gets its own number. Without it, the value # of i in the renderPlot() will be the same across all instances, because # of when the expression is evaluated. local({ my_i <- i plotname <- paste("plot", my_i, sep="") output[[plotname]] <- renderPlot({ plot(1:my_i, 1:my_i, xlim = c(1, max_plots), ylim = c(1, max_plots), main = paste("1:", my_i, ". n is ", input$n, sep = "")) }) }) } }) 

ui.R

 shinyUI(pageWithSidebar( headerPanel("Dynamic number of plots"), sidebarPanel( sliderInput("n", "Number of plots", value=1, min=1, max=5) ), mainPanel( uiOutput("plots") # This is the dynamic UI for the plots ) )) 

Para responder a la pregunta en el comentario anterior, acerca de cómo devolver dinámicamente una lista de objetos (por ejemplo, un gráfico, una tabla y un texto), puede generar una lista de resultados apropiados contenidos en una etiqueta div en el renderUI que luego coincidir con las funciones de representación apropiadas en el ciclo for. Por ejemplo:

 max_plots < - 5 shinyServer(function(input, output) { # Insert the right number of plot output objects into the web page output$plots <- renderUI({ plot_output_list <- lapply(1:input$n, function(i) { plotname <- paste("plot", i, sep="") plottitle <- paste("plottitle", i, sep="") tablename <- paste("tablename", i, sep="") tags$div(class = "group-output", textOutput(plottitle, container = h3), plotOutput(plotname, height = 280, width = 250), tableOutput(tablename) ) }) # Convert the list to a tagList - this is necessary for the list of items # to display properly. do.call(tagList, plot_output_list) }) # Call renderPlot for each one. Plots are only actually generated when they # are visible on the web page. for (i in 1:max_plots) { # Need local so that each item gets its own number. Without it, the value # of i in the renderPlot() will be the same across all instances, because # of when the expression is evaluated. local({ my_i <- i plotname <- paste("plot", my_i, sep="") plottitle <- paste("plottitle", my_i, sep="") tablename <- paste("tablename", my_i, sep="") output[[plotname]] <- renderPlot({ plot(1:my_i, 1:my_i, xlim = c(1, max_plots), ylim = c(1, max_plots), main = paste("1:", my_i, ". n is ", input$n, sep = "")) }) output[[plottitle]] <- renderText({paste("1:", my_i, ". n is ", input$n, sep = "") }) output[[tablename]] <- renderTable({table(x = 1:my_i, y = 1:my_i) }) }) } }) 

¡Espero que eso ayude!

Añade dinámicamente N trazados como desees con shiny:

 runApp( list( ui = fluidPage( headerPanel('Tittle'), sidebarPanel( fileInput('file1', 'Choose File:'), textInput("target", label="Target", value="Choose target"), actionButton("addButton", "Go!"), p('The button start the code server'), p("This is UI") ), mainPanel( uiOutput("plots") )), #SERVER server = function(input, output) { dataset < - eventReactive(input$addButton, { #Obtain the file and textinput inFile <- input$file1 df <- read.csv(inFile$datapath) df$target <- input$target return(df) }) output$plots <- renderUI({ df <- dataset() n <- df$target[1] plot_output_list <- lapply(1:n, function(i) { plotname <- paste("plot", i, sep="") plotOutput(plotname, height = 580, width = 550) }) do.call(tagList, plot_output_list) }) observe({ for (i in 1:length()) { local({ plotname <- paste("plot", i, sep="") output[[plotname]] <- renderPlot({ #function_plot is the function generate plot function_plot() }) })#endlocal } }) } ) ) 

https://github.com/ericbellet/recomendacion-modelos/blob/master/shiny/generate_rocSHINY.R