在点击按钮后仅显示情节之前,我已经写了一个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())作为输出
答案 0 :(得分:1)
请参阅renderPlot()
的文档(我在下面重点介绍了相关部分):
width
,height
渲染图的宽度/高度,以像素为单位;或者&#39; auto&#39;使用绑定到此图的HTML元素的offsetWidth / offsetHeight。您还可以传入一个以像素为单位返回宽度/高度的函数或者&#39; auto&#39 ;;在函数体中,您可以引用反应值和函数。 渲染内联绘图时,必须为宽度和高度提供数值(以像素为单位)。