我试图创建一个Shiny应用程序,允许用户选择一些输入参数,根据输入执行分析,然后以可变数量的图形的形式输出分析结果
这个想法是用户使用操作按钮设置分析运行,然后如果发现任何有趣的东西(取决于分析的某些条件和输入参数),则生成x个图,然后显示在屏幕。 x通常介于0(没有发现任何有趣内容)和20(发现20个有趣结果)之间。
我已经在这里看了一眼:Shiny: Dynamic Number of Output Elements/Plots,在这里:Shiny example app with dynamic number of plots,在这里:Dynamic number of reactive plots with shiny在其他地方,但我对Shiny和所以我真的很努力让一切顺利。我在绘制可变数量的图像/图形方面取得了一些有限的成功,但我在实时绘制图像方面没有成功。正如我的分析正在运行。
分析代码是我过去编写的R脚本,我试图将其改编为Shiny。它相当长并且使用了几个功能。我设法让脚本在Shiny中运行,但我唯一能做的就是将结果打印到屏幕上。
这是我的(伪)代码(大多数分析内容被删除,因为它并不真正相关):
ui.R
shinyUI(fluidPage(
titlePanel(title=div(img(src="logo.png"))),
sidebarLayout(
sidebarPanel(
h3("Select analysis parameters"),
# Select date range for analysis
dateRangeInput("dates",
"Date range",
start = "2016-10-01",
end = as.character(Sys.Date())),
# Specify some variable related to the analysis
sliderInput("var1", label = h3("Variable 1"),
min = 1, max = 20, value = 10),
# Begin analysis
actionButton("do","Run Scan")
),
mainPanel(
# I want my analysis results images to be displayed here. The results are generated using plot() and the number of plots is variable.
)
)
))
server.R
# Define server logic
shinyServer(function(input, output, session) {
observeEvent(input$do, {
# Start analysis that looks at 10 test cases
for (i in 1:10) {
# Perform analysis that fills the 'pattern' dataframe with a variable number of rows...
# <code snipped for brevity>
# Then plot the results of the analysis if anything interesting has been found and save to disk...
if(nrow(patterns) > 0){
for(i in 1:nrow(patterns)){
# Results from each test case save as a different image
mypath <- file.path("C:/MyFolder/ShinyImage",paste(patterns$name[i],"_", i, ".png", sep = ""))
png(file=mypath)
# plot the results *THESE ARE THE IMAGES THAT I WANT TO PRINT TO SCREEN*
plot(whatever_has_been_found)
dev.off()
}
}
}
})
})
理想情况下,结果图将在分析运行时实时弹出,但另一种方法是分析完成然后显示所有图。
非常感谢有关此问题的任何帮助!提前谢谢。