闪亮的专家!
在我们的应用程序中,我们有用于情节下载的下载按钮。该按钮仅在加载和处理某些数据时有效。当您按下按钮之前,绘图功能会显示一条错误消息,因为它没有数据。
content = function(file) {
r <- rChart_line_plot(follow_view_func(),log_scale = input$checkbox_log_scale_plot,isRel = input$checkboxRelativeTab2)
r$save(file, standalone = TRUE)
}
我们希望让我们的应用程序万无一失,没有错误。是否有任何可能的方式发送到downloadHandler的内容&#34; NULL&#34;?这不起作用。
content = function(file) {
if ( "our data are ready for printing" ) {
r <- rChart_line_plot(follow_view_func(),log_scale = input$checkbox_log_scale_plot,isRel = input$checkboxRelativeTab2)
r$save(file, standalone = TRUE)
} else {
NULL
}
}
我们得到了:
Error opening file: 2
Error reading: 9
是否有类似validate()的函数,甚至包含用户信息&#34;请先加载文件&#34;
非常感谢你。
答案 0 :(得分:4)
你想要一个validate
陈述是正确的。这是一个link,其中包含来自RStudio团队的描述。这将允许您提供更多信息性错误消息。您的完整downloadHandler
函数将如下所示。请注意,这假设您的数据集可能为空。
output$Download <- downloadHandler(
filename = function() {
paste("test.png",sep="")
},
content = function(file) {
myData <- follow_view_func()
validate(
need(!is.null(myData), "Please select valid dataset")
)
r <- rChart_line_plot(myData,log_scale = input$checkbox_log_scale_plot,isRel = input$checkboxRelativeTab2)
r$save(file, standalone = TRUE)
}
)
以下是iris
数据集的完整可重复示例。
library(shiny)
library(rCharts)
runApp(
list(
ui = pageWithSidebar(
headerPanel("Using 'validate' for useful error messages"),
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("null", "iris")),
selectInput(inputId = "x",
label = "Choose X",
choices = c('SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'),
selected = "SepalLength"),
selectInput(inputId = "y",
label = "Choose Y",
choices = c('SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'),
selected = "SepalWidth"),
downloadButton("Download")
),
mainPanel(
showOutput("myChart", "polycharts")
)
),
server = function(input, output) {
datasetInput <- reactive({
switch(input$dataset,
"iris" = iris,
"null" = NULL)
})
myChart <- reactive({
myData <- datasetInput()
validate(
need(!is.null(myData), "Please select valid dataset")
)
names(myData) = gsub("\\.", "", names(myData))
p1 <- rPlot(input$x, input$y, data = myData, color = "Species",
facet = "Species", type = 'point')
p1$addParams(dom = 'myChart')
return(p1)
})
output$myChart <- renderChart({myChart()})
output$Download <- downloadHandler(
filename = function() {
paste("test.png",sep="")
},
content = function(file) {
p1 <- myChart()
p1$save(file, standalone = TRUE)
}
)
}
)
)
<强>更新强>
根据OP请求,使用下载按钮可能没有任何错误。我能想出的唯一解决方案是将按钮设为conditionalPanel
。这对我来说是直观的,因为如果屏幕上什么都没有,你为什么要下载?上面代码中唯一需要改变的是:
downloadButton("Download")
到
conditionalPanel("output.myChart", downloadButton("Download"))
现在只有在创建有效图表时才会出现下载按钮。