【问题标题】:Display files on R Shiny using next tab使用下一个选项卡在 R Shiny 上显示文件
【发布时间】:2017-05-09 16:03:26
【问题描述】:

我有一组图像,我想通过下一个操作按钮使用 R Shiny 查看。如何使用下一步按钮依次查看它们。每次我运行我的代码时,我都可以查看第一张图片,但是,当我单击下一个按钮时,我收到以下错误:警告:$ 中的错误:'closure' 类型的对象不是子集。 em> 这是我到目前为止的代码。

library(shiny)
library(shinydashboard)

dir_path <- '*/*'
L <- list.files(dir_path, pattern = ".png")

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    # Boxes need to be put in a row (or column)
    fluidRow(
      box(
        title = "Controls", solidHeader = TRUE, status="primary",collapsible = TRUE,
        actionButton("next_image","next")
      ),
      box(
        imageOutput("myimage",width=300,height=300)
      )
    )

  )
)

server <- function(input, output) {

  values<-reactiveValues(data = NULL)
  values$count <- 1


  ntext <- eventReactive(input$next_image,{

    # Check if the counter `values$count` are not equal to the length of your questions
    # if not then increment by 1 and return that image
    # Note that initially the button hasn't been pressed yet so the `ntext()` will not be executed
    if(values$count != length(L)){
      values$count <- values$count + 1
      return(L[values$count])
    }
    else{
      # otherwise just return the last image
      return(L[1])
    }
  })

  ntext <- eventReactive(input$next_image,{

    # Check if the counter `values$count` are not equal to the length of your questions
    # if not then increment  by 1 and return that image
    # Note that initially the button hasn't been pressed yet so the `ntext()` will not be executed
    if(values$count != length(L)){
      values$count <- values$count + 1
      print(values$count)
      return(renderImage({
          path<-file.path(paste( '*/*',L[values$count], sep = ""))

          return(list(src = path, 
                      contentType = "image/png"))
      },
      deleteFile = FALSE
      ))
    }
    else{
      # otherwise just return the last image
      return(L[length(L)])
    }
  })
  output$myimage<- renderImage({
    if (input$next_image == 0){
    path<-file.path(paste( dir_path,L[1], sep = ""))

    return(list(src = path, 
                contentType = "image/png"))} 

    ntext()
  },
  deleteFile = FALSE
  )

}

shinyApp(ui, server)

【问题讨论】:

    标签: r rstudio shiny data-science


    【解决方案1】:

    首先我建议创建三个示例图片以使代码完全可重现:(它们将保存在工作目录中)

    # Create 3 sample pictures
    for(nr in 1:3){
      png(filename = paste0(nr, ".png"))
      plot(nr)
      dev.off()
    }
    

    您的服务器功能似乎有点复杂。其实你只需要:

    server <- function(input, output) {
    
      values <- reactiveValues(count = 1)
    
      observeEvent(input$next_image,{
          values$count <- min(values$count + 1, length(L))
      })
    
      output$plot3 <- renderImage({
        list(src = normalizePath(paste0(values$count, ".png")))
      }, deleteFile = FALSE)
    
    }
    

    (请注意,我假设您的工作目录中没有保存其他 .png。)

    对于工作应用,请参见下文:

    # Create 3 sample pictures
    for(nr in 1:3){
      png(filename = paste0(nr, ".png"))
      plot(nr)
      dev.off()
    }
    L <- list.files(getwd(), pattern = ".png")
    
    library(shiny)
    library(shinydashboard)
    ui <- dashboardPage(
      dashboardHeader(),
      dashboardSidebar(),
      dashboardBody(
        # Boxes need to be put in a row (or column)
        fluidRow(
          box(
            title = "Controls", solidHeader = TRUE, status="primary",collapsible = TRUE,
            actionButton("next_image","next")
          ),
          box(
            imageOutput("plot3",width=300,height=300)
          )
        )
    
      )
    )
    
    server <- function(input, output) {
    
      values <- reactiveValues(count = 1)
    
      observeEvent(input$next_image,{
          values$count <- min(values$count + 1, length(L))
      })
    
      output$plot3 <- renderImage({
        list(src = normalizePath(paste0(values$count, ".png")))
      }, deleteFile = FALSE)
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 2014-09-27
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2020-02-29
      • 2021-07-09
      相关资源
      最近更新 更多