【发布时间】:2019-08-14 09:35:31
【问题描述】:
我正在编写一个应用程序 (Shiny),它需要检查您是否要使用特定数据,为此您需要 1. 选中一个框 2. 您检查的数据日期应小于 30 天前.为此我写了一个if (elseif) 声明
recent <- reactive({
ifelse( as.numeric(difftime(Sys.Date(), as.POSIXct(input$date) )) <= 30 && input$hist==TRUE, TRUE, FALSE )
})
其中input$hist 是用户界面上的复选框,默认值为input$hist = FALSE,如果您选中box = TRUE。 input$date 也是来自 UI 的输入,它是一个日期。如果您不熟悉 RShiny,则响应式只是意味着如果用户界面发生更改,此值会自动更新。
我尝试编写不同的 if/else 语句,使用其他变量值而不是 TRUE/FALSE 等...如果我只使用 30 天的要求,我的语句似乎有效。
错误:需要
TRUE/FALSE的地方缺少值
【问题讨论】:
-
我想问题是由于 input$hist 或 input$date 的初始化阶段。尝试添加/更改为:
recent <- reactive({req(input$date);req(input$hist); ifelse( as.numeric(difftime(Sys.Date(), as.POSIXct(input$date) )) <= 30 && input$hist==TRUE, TRUE, FALSE ) }) -
好的,只要稍作修改就可以了(不会抛出任何错误)。现在我有一个问题,我在我的其他函数之一中使用“recent=recent()”作为参数。如果最近()为真,但当最近()应该为假时,我得到一些奇怪的东西(应该出现的图,消失,没有错误?)但是如果我硬编码最近=假,图仍然出现。这指出了最近()没有像它应该的那样取值 FALSE 的事实?
recent <- reactive({ifelse( as.numeric(difftime(Sys.Date(), as.POSIXct(input$date) )) <= 30 && req(input$hist)==TRUE, TRUE, FALSE ) }) -
写
ifelse(condition, TRUE, FALSE)是冗余冗余。只需写condition。同样,不要写something == TRUE,而是写something。不要重复显而易见的事情。这留下了recent <- reactive(as.numeric(difftime(Sys.Date(), as.POSIXct(input$date))) <= 30 && input$hist)。 -
@CFRedDemon 在下一点你应该使用
req(recent())。否则,您应该将初始代码更改为:recent <- reactive({ifelse(!is.null(input$date) && !is.null(input$hist) && as.numeric(difftime(Sys.Date(), as.POSIXct(input$date) )) <= 30 && input$hist, TRUE, FALSE) })
标签: r if-statement