我正在尝试使用进度条(通过命令'withProgress')来监视我在闪亮运行的管道的完成情况。
有6个进度条。通过上传文件并随后单击“actionButton”(inputId = action)来启动管道。但是,在我上传文件之前,有3个进度条暂时出现。然后当我运行管道时,它们以错误的顺序出现,即应该是第一个出现在第二个等等。
任何人都可以告诉我为什么会发生这种情况以及如何纠正它? 下面是管道的样子:
#ui.R
shinyUI(fluidPage(
titlePanel("Uploading Files"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"')
),
mainPanel(
plotOutput('plot')
)
)
))
#server.R
server <- function(input, output, session) {
read <- reactive({
dataInput <- eventReactive(input$action{
inFile <- input$file1
if (is.null(inFile))
return(NULL)
isolate(file<-read.csv(inFile$datapath, header = input$header,
sep = input$sep))
file
})
file_data_manipulated<-reactive({
withProgress(message = 'Please Wait',
detail = 'This may take a while...', value = 0, {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.25)
}
as.numeric(dataInput())
})
})
output$plot<-renderPlot({
withProgress(message = 'Please Wait',
detail = 'This may take a while...', value = 0, {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.25)
}
plot(file_data_manipulated(), main = "Sample clustering to detect outliers", sub="", xlab="", cex.lab = 1.5, cex.axis = 1.5, cex.main = 2)
abline(h = input$cutoff_filter, col = "red")
#legend("bottomleft", scc$csize>1, pt.bg=unique(node_colors), pch=21)
})
})
答案 0 :(得分:1)
我认为您的代码不完整。之前出现进度条,因为只要调用服务器函数,反应函数内的所有代码都将被执行,您需要提供控制何时显示进度条的机制。在这种情况下,只需检查文件是否已使用if
正确上传就足够了。
我修改了你的代码以显示如何控制反应函数。由于我不知道您的输入文件是什么,我只是绘制一些基本数据。另外,我不知道你是如何使用read <- reactive({
的,所以只是删除它。
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Uploading Files"),
sidebarLayout(
sidebarPanel(
fileInput('file1', 'Choose CSV File',
accept=c('text/csv',
'text/comma-separated-values,text/plain',
'.csv')),
tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons('sep', 'Separator',
c(Comma=',',
Semicolon=';',
Tab='\t'),
','),
radioButtons('quote', 'Quote',
c(None='',
'Double Quote'='"',
'Single Quote'="'"),
'"'),
br(),
actionButton('action', 'action')
),
mainPanel(
plotOutput('plot')
)
)
))
server <- function(input, output, session) {
dataInput <- eventReactive(input$action, {
inFile <- input$file1
if (is.null(inFile))
return(NULL)
isolate({
file <- read.csv(inFile$datapath, header = input$header,
sep = input$sep)
})
file
})
file_data_manipulated <- reactive({
input$action
if (is.null(dataInput()))
return(NULL)
withProgress(message = 'Please Wait 1',
detail = 'This may take a while...', value = 0, {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.25)
}
as.numeric(dataInput())
})
})
output$plot <- renderPlot({
input$action
if (is.null(dataInput()))
return(NULL)
withProgress(message = 'Please Wait 2',
detail = 'This may take a while...', value = 0, {
for (i in 1:15) {
incProgress(1/15)
Sys.sleep(0.25)
}
# plot(file_data_manipulated(), main = "Sample clustering to detect outliers",
# sub="", xlab="", cex.lab = 1.5, cex.axis = 1.5, cex.main = 2)
# abline(h = input$cutoff_filter, col = "red")
#legend("bottomleft", scc$csize>1, pt.bg=unique(node_colors), pch=21)
plot(sin, -pi, 2*pi)
})
})
}
runApp(list(ui = ui, server = server))