gpt4 book ai didi

R Shiny 处理 - 处理来自空数据帧的错误

转载 作者:行者123 更新时间:2023-12-04 18:07:36 24 4
gpt4 key购买 nike

我正在编写我的第一个 Shiny 应用程序,到目前为止我很享受它。我的应用程序在一个数据框架上工作,该数据框架包括许多衡量膳食方面的变量。它允许用户使用 slider 选择六个连续变量的范围。这些输入用于对数据框进行子集化,然后是 ggplot是根据数据子集创建的。

我的问题是 - 当所选范围在子集数据框中没有剩余的数据时,我在主面板中打印了此红色错误消息,该图通常是:

Error: argument is of length zero (from: Error in if (nrow(layer_data) == 0) return() : argument is of length zero).  

我理解为什么会发生此错误,如果我在典型的数据分析 session 期间获得静态图,这是有道理的。但是,我正在尝试找出在 Shiny 的网络应用程序情况下处理此问题的正确方法。

由于此消息对用户没有意义,我想:

1) 能够将其替换为明智的消息
2) 返回空白图表
3) 不显示任何内容(即当数据框为空时不向用户显示错误消息或图表)

问题是,如果我检查一个空数据框并返回一个不同的(空白)图或消息,那么当用户将 slider 设置更改为确实有数据的东西时,不会出现正确的图(因为 react 对象是不再一样)。如果我只是让错误消息像现在一样出现并且用户更改设置,则图表会适当更新。

有人可以推荐一种在 Shiny 中优雅地处理这个问题的方法吗?

最佳答案

截至shiny 0.10.0有两个很好的功能可以帮助您解决您描述的情况,即 needvalidate .给出的示例要求用户选择 groups 的数字。和 cohort .如果用户没有选择所需的对象,那么 need函数显示相关输出。也可以通过 validate 函数分配一个定制的 CSS 类,然后可以将其用于样式:

library(shiny)
library(ggplot2)
myData <- data.frame(group = sample(letters[1:4], 100, TRUE)
, cohort = sample(0:4, 100, TRUE)
, value = runif(100))
runApp(
list(ui = fluidPage(
column(4,
checkboxGroupInput('group', 'Pick a group', choices = letters[1:4]),
selectizeInput('cohort', 'Pick a cohort', choices = 0:4)),
column(8, plotOutput('myplot'))
)
, server = function(input, output, session) {
appData <- reactive({
myData[myData$group %in% input$group & myData$cohort == input$cohort,]
})
output$myplot <- renderPlot({
validate(
need(input$group, 'Please select at least one group'),
need(input$cohort > 0, 'Please choose a cohort greater than zero')
)
g <-ggplot(appData(),aes(x=group, y=value)) +
stat_summary(fun.y=sum, geom="bar") +
ggtitle(paste('cohort', input$cohort))
g
})
}
)
)

enter image description here

关于R Shiny 处理 - 处理来自空数据帧的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038580/

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