gpt4 book ai didi

r - 在 Shiny 中无错误地下载 react 对象

转载 作者:行者123 更新时间:2023-12-01 12:37:30 25 4
gpt4 key购买 nike

Shiny 的专家!

在我们的应用程序中,我们有下载情节的下载按钮。该按钮仅在加载和处理某些数据时起作用。之前按下按钮时,绘图功能会出现错误消息,因为它没有数据。

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 的内容“NULL”?这行不通。

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() 函数的东西,甚至可以为用户“请先加载文件”提供信息

非常感谢。

最佳答案

您是正确的,您需要一个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"))

现在只有在创建有效图表时才会显示下载按钮。

关于r - 在 Shiny 中无错误地下载 react 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com