【发布时间】:2021-09-11 04:17:41
【问题描述】:
我有一个闪亮的应用程序,当用户选择 Jan 1 和 Q2 如果用户选择 Apr 1 等时,我想在其中创建一个标题为“Q1”,但由于某种原因,我无法转换日期范围输入变成一个字符。
例如,我知道这段代码适用于常规字符串:
date <- "2020-10-01"
library(stringr)
libary(dplyr)
date <- date %>%
str_remove("^..") %>%
str_replace_all("-", "/")
starting <- if(str_detect(date, "../01/01")) {
print("Q1")
} else if(str_detect(date, "../04/01")){
print("Q2")
} else if(str_detect(date, "../07/01")){
print("Q3")
} else if(str_detect(date, "../10/01")){
print("Q4")
} else{
paste0(str_extract(date, ".....$"), "/", str_extract(date, "^.."))
}
#Correctly says Q4
starting
但是,当我尝试将其放入闪亮的应用程序时,我会收到各种错误,例如:
Warning: Error in cat: argument 1 (type 'closure') cannot be handled by 'cat'
如何让这个应用程序使用上面的代码来更改下面消息输出中呈现的文本?注意:为简单起见,我只使用日期过滤器中的第一个输入,但如果由于某种原因,第二个会有所不同,请告诉我我需要做什么。
library(shiny)
library(dplyr)
library(stringr)
ui <- fluidRow(
column(12,
div(id = "inputs",
dateRangeInput(
inputId = "date_filter",
label = "Filter by Date",
start = "2020-01-01",
end = (today() + 90),
min = "2021-01-01",
max = NULL,
format = "yyyy-m-d",
startview = "month",
weekstart = 0,
language = "en",
separator = " to ",
width = NULL,
autoclose = TRUE
)),
textOutput("message")
)
)
server <- function(input, output) {
start_date <- reactive({input$datefilter[1]
})
start_date <- reactive({start_date %>%
str_remove("^..") %>%
str_replace_all("-", "/")
})
starting <- reactive({
if(str_detect(start_date, "..../01/01")) {
print("Q1")
} else if(str_detect(start_date, "..../04/01")){
print("Q2")
} else if(str_detect(start_date, "..../07/01")){
print("Q3")
} else if(str_detect(start_date, "..../10/01")){
print("Q4")
} else{
paste0(str_extract(start_date, ".....$"), "/", str_extract(start_date, "^.."))
}
})
output$message <- renderText({
starting
})
}
shinyApp(ui = ui, server = server)
编辑:
我也尝试将所有内容放在一个响应式中,但现在我得到一个长度为零的 agument:
output$message <- renderText({
start_date <- input$datefilter[1]
start_date <- start_date %>%
str_remove("^..") %>%
str_replace_all("-", "/")
starting <-
if(str_detect(start_date, "..../01/01")) {
print("Q1")
} else if(str_detect(start_date, "..../04/01")){
print("Q2")
} else if(str_detect(start_date, "..../07/01")){
print("Q3")
} else if(str_detect(start_date, "..../10/01")){
print("Q4")
} else{
paste0(str_extract(start_date, ".....$"), "/", str_extract(start_date, "^.."))
}
})
【问题讨论】:
-
不清楚你为什么要使用
if/else if..尝试使用format(zoo::as.yearqtr(as.Date(date)), 'Q%q')# [1] "Q4" -
@akrun,感谢分享功能,我去看看。 if/else 不是问题; Shiny 不允许我将 daterange 输入放入字符串中进行任何一种转换。
-
以下解决方案对我有用。当用户更改输入时,它会打印季度值
标签: r string date shiny reactive-programming