R Shiny - plotOutput内联和大小参数阻止输入renderPlot

时间:2015-09-11 18:59:48

标签: r shiny

在点击按钮后仅显示情节之前,我已经写了一个R闪亮的应用程序。出于某种奇怪的原因,我无法在点击按钮后输入以下代码进入renderPlot功能(例如,点击按钮时从未到达browser())并且我很难过。请成为我的第二双眼睛,我确定我错过了一些微不足道的东西。

observe功能正常工作,并按我想要的方式更新selectizeInput。导入csv也可以正常工作,我也可以使用DT::renderDataTable来显示它。

您可以使用this作为示例数据,但这不重要,因为我的代码还没有绘制任何内容

服务器

rm(list = ls())

library(shiny)
library(leaflet)
library(DT)
library(stringr)
library(zoo)
options(shiny.maxRequestSize=30*1024^2) 

TAG_COL <- 1
TIME_COL <- 2
DATE_COL <- 3
ACTION_COL <- 4

HEADFIX_STR <- 'reward0'

shinyServer(function(input, output, clientData, session) {    
  inFile<-reactive({
    input$file1
    if(is.null(input$file1)){
      return(NULL)
    }
    else{
      inF<-read.csv(input$file1$datapath, header=input$header, sep=input$sep, quote=input$quote) 
      inF
    }
  })

  observe({ 
    if(!is.null(inFile)){
      updateSelectizeInput(session, "tagChooser",
                           'Choose Tags to plot',
                           choices = unique(inFile()[[TAG_COL]]))
    }
  })

  # Subset between start and end with bin column and selected mice
  subsetTable<-reactive({
    browser()
    # More code to come
  })

  # Plot histrogram of times between headfixes 
  # TODO: assumes all mice in same cage. Fix to make it work for a selection of mice from seperate cages
  output$plotHist<-renderPlot({
    input$goButton
    browser() # <-- Why is this browser() never reached after clicking the button?
    isolate({
        subsetTable()
        subsetHeadfixes<-subsetTable()
        # More code to come
      })
  })
})

UI

rm(list = ls())
# Immediately enter the browser/some function when an error occurs
# options(error = some funcion)

library(shiny)
library(DT)

shinyUI(fluidPage(
  titlePanel("MurphyLab"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose CSV File',
                accept=c('text/csv', 
                         'text/comma-separated-values,text/plain', 
                         '.csv')),
      checkboxInput('header', 'Header', TRUE),
      radioButtons('sep', 'Separator',
                   c(Comma=',',
                     Semicolon=';',
                     Tab='\t'),
                   ','),
      radioButtons('quote', 'Quote',
                   c(None='',
                     'Double Quote'='"',
                     'Single Quote'="'"),
                   '"'),
      selectizeInput('tagChooser', 'Choose Tags to plot', choices = c("data not loaded"), multiple = TRUE),
      textInput("abs_start","Insert start date and time. Format: %Y-%m-%d %H:%M:%S",value="2015-06-15 01:00:00"),
      textInput("abs_end","Insert end date and time. Format: %Y-%m-%d %H:%M:%S",value="2015-08-15 01:00:00"),
      textInput("binning", "Binning in seconds",value = 86400),
      actionButton("goButton", "Plot")
    ),

    mainPanel(
      plotOutput("plotHist", inline = TRUE,width='auto',height='auto')
    )
  )
)
)

更新:

因此,当我将plotOutput中的mainPanel来电更改为plotOutput("plotHist")时,一切都按预期进行。我将问题改为:为什么这会解决问题?此外,只将inline设置为FALSE并不能解决问题。

inline州的文档:

  

使用内联(span())或块容器(div())作为输出

1 个答案:

答案 0 :(得分:1)

请参阅renderPlot()的文档(我在下面重点介绍了相关部分):

  

widthheight渲染图的宽度/高度,以像素为单位;或者&#39; auto&#39;使用绑定到此图的HTML元素的offsetWidth / offsetHeight。您还可以传入一个以像素为单位返回宽度/高度的函数或者&#39; auto&#39 ;;在函数体中,您可以引用反应值和函数。 渲染内联绘图时,必须为宽度和高度提供数值(以像素为单位)。