当我将反应数据传递给renderPlot
(或其他渲染函数)时,数据通常最初为空,直到某些操作发生。默认渲染通常在操作发生之前在应用程序中显示错误,因为数据为空,即
在这个例子中错误'x'必须是数字
。是否有一些标准的方法让渲染函数在没有数据时起作用(如果出现错误或者只是空白则可能无法渲染)?我知道我可以解决构造所有被动值的问题,因此输出将是空白的,但这似乎是不必要的工作。
rMarkdown闪亮的例子
---
title: "Example"
runtime: shiny
output: html_document
---
```{r}
shinyApp(
shinyUI(fluidPage(
inputPanel(
numericInput("n", "n", 10),
actionButton("update", "Update")
),
plotOutput("plot")
)),
shinyServer(function(input, output) {
values <- reactiveValues()
values$data <- c()
obs <- observe({
input$update
isolate({ values$data <- c(values$data, runif(as.numeric(input$n), -10, 10)) })
}, suspended=TRUE)
obs2 <- observe({
if (input$update > 0) obs$resume()
})
output$plot <- renderPlot({
dat <- values$data
hist(dat)
})
})
)
```
答案 0 :(得分:1)
您可以使用c:\Program Files (x86)\Windows Kits\10\References\CommonConfiguration\Neutral
函数在尝试绘制变量之前查看变量是否存在,并根据需要进行更改:
MDMERGE : error MDM2012: Error 3 has occured while enumerating files in C:\Program Files (x86)\Windows Kits\10\References\CommonConfiguration\Neutral\*.winmd.
答案 1 :(得分:1)
尝试围绕可能在 tryCatch
中出错的行。在你的例子中,hist(dat)
是什么错误,所以像这样包围它:
tryCatch(
{ hist(dat) }, # Code that might error goes here, between the { }
error = function(e) {""} # Leave this line as-is.
)
那是闪亮的:
hist(dat)
,并且现在不再有错误消息,您的直方图仍然按预期工作。
这是实施了 tryCatch
解决方案的 MRE - 向下滚动到评论显示 # CHANGES HERE
的位置;它只是将 hist(dat)
替换为 4 个 tryCatch()
行 - 这是唯一的变化。
---
title: "Example"
runtime: shiny
output: html_document
---
```{r}
shinyApp(
shinyUI(fluidPage(
inputPanel(
numericInput("n", "n", 10),
actionButton("update", "Update")
),
plotOutput("plot")
)),
shinyServer(function(input, output) {
values <- reactiveValues()
values$data <- c()
obs <- observe({
input$update
isolate({ values$data <- c(values$data, runif(as.numeric(input$n), -10, 10)) })
}, suspended=TRUE)
obs2 <- observe({
if (input$update > 0) obs$resume()
})
output$plot <- renderPlot({
dat <- values$data
# CHANGES HERE (NEXT 4 LINES)
tryCatch(
{ hist(dat) },
error = function(e) {""}
)
})
})
)
```