gpt4 book ai didi

javascript - 使用 R Shiny 比较条件面板中的日期

转载 作者:行者123 更新时间:2023-11-29 22:46:35 24 4
gpt4 key购买 nike

我在 ui.R 文件中使用 conditionalPanel。我想比较 selectinput 中的给定日期是在某个日期 (30.09.2019) 之前还是之后。

我的 selectInput 看起来像:

selectInput(inputId = 'date',
label = 'Stichtag:',
choices = sub("([0-9]{4}).([0-9]{2}).([0-9]{2})", "\\3.\\2.\\1",sort(as.Date(
sub("([0-9]{2})([0-9]{2})([0-9]{4})KRB.csv", "\\1.\\2.\\3",
list.files('./data', full.names = FALSE,
recursive = FALSE)),format="%d.%m.%Y"),decreasing = T)
)),

和我的conditionalPanel

conditionalPanel(
#condition = " input.date == '30.09.2019'", #(this works)
condition="Date.parse(input.date)>Date.parse(30.08.2019)", #(it dose not work)
## select the variables and order
pickerInput(
inputId = "assetclass",
label = "Assetklassen:",
choices = c(sort(unique(bestand.name))),
sort(unique(bestand.name)),
multiple = T
) ),

在上面的代码中,您会看到 2 个条件。第一个

 condition = " input.date == '30.09.2019'"

有效但不是一般的智能解决方案,因为我将每 3 个月有一个额外的约会。因此,我正在寻找像

这样的通用解决方案
condition="Date.parse(input.date)>Date.parse(30.08.2019)"

我知道我必须使用Js。但它不起作用!

附录:我试图在server.R中查看输入日期的格式

Browse[2]> input$date
[1] "30.09.2019"

所以在 JS 中比较它们之前,我可能必须转换日期中的字符串!?我只是为了好玩而尝试了以下声明:

 condition= "new Date('2013-05-23') > new Date('2013-05-24')",

但是,它不起作用!

最佳答案

我知道你问的是如何在 conditionalPanel 中比较日期,但无论你想做什么,在服务器端使用 renderUI 会容易得多.

根据你的问题,我假设你有一些季度报告正在运行,并且随着季度的变化,你想要显示不同的过滤器/selectInputs。

下面我展示了一个玩具示例,它检查所选 input$date 是否等于上个季度的结束日期(round_date(Sys.Date(), "quarter") - 天(1))).

请注意,我添加了对 stringrlubridate 的库调用。

我进一步组成了一个 csv 文件名的字符向量,因为我无法重现您提供的代码。

library("shiny")
library("shinyWidgets")
library("lubridate")
library("stringr")

# made up character vector of csv file names
date_vec <- c("30092019KRB.csv",
"31082019KRB.csv",
"31072019KRB.csv",
"30062019KRB.csv",
"31052019KRB.csv",
"30042019KRB.csv")

shinyApp(

ui = fluidPage( # user interface

sidebarLayout( # layout with Sidebar

sidebarPanel( # input sidebarPanel

selectInput(inputId = 'date',
label = 'Stichtag:',
choices = sub("([0-9]{4}).([0-9]{2}).([0-9]{2})",
"\\3.\\2.\\1",
sort(as.Date(sub("([0-9]{2})([0-9]{2})([0-9]{4})KRB.csv",
"\\1.\\2.\\3",
# below date_vec replaces your list.files() call
date_vec),
format="%d.%m.%Y"),
decreasing = T)
)
) ,

uiOutput("classes")

), # closes sidebarPanel

mainPanel( # Output in mainPabel


) # closes mainPanel

) # closes sidebarLayout

), # closes fluidPage

server = function(input, output) {

output$classes <- renderUI({

# example condition: if input$date is equal to the date of the actual quarter minus 1 day then...
if(dmy(str_remove(input$date, "KRB.csv")) == (round_date(Sys.Date(), "quarter") - days(1))) {

# use show this pickerInput ....
pickerInput(
inputId = "assetclass",
label = "Assetklassen:",
choices = c("class a", "class b", "class c"),
multiple = T
)

# otherwise show this pickerInput ...
} else {

pickerInput(
inputId = "equity",
label = "Equity classes:",
choices = c("class d", "class e", "class f"),
multiple = T
)

}

})


}

) # closes shinyApp

如果您更喜欢conditionalPanel,您可以基于 Udit 的方法(如下),而不是编写一个 JS 函数,您可以将您的输入向量转换为正确的格式并按原样使用它。

但是,如果稍后在服务器端使用输入向量,则需要通过一些字符串操作将其转换为旧格式。

library("shiny")
library("shinyWidgets")

# made up character vector of csv file names
date_vec <- c("30092019KRB.csv",
"31082019KRB.csv",
"31072019KRB.csv",
"30062019KRB.csv",
"31052019KRB.csv",
"30042019KRB.csv")

choice_vec <- gsub("[-]",
"/",
sort(as.Date(sub("([0-9]{2})([0-9]{2})([0-9]{4})KRB.csv",
"\\3.\\2.\\1",
# below date_vec replaces your list.files() call
date_vec),
format="%Y.%m.%d"),
decreasing = T)
)



names(choice_vec) <- sub("([0-9]{4}).([0-9]{2}).([0-9]{2})",
"\\3.\\2.\\1",
sort(as.Date(sub("([0-9]{2})([0-9]{2})([0-9]{4})KRB.csv",
"\\1.\\2.\\3",
# below date_vec replaces your list.files() call
date_vec),
format="%d.%m.%Y"),
decreasing = T)
)

shinyApp(

ui = fluidPage( # user interface

sidebarLayout( # layout with Sidebar

sidebarPanel( # input sidebarPanel

selectInput(inputId = 'date',
label = 'Stichtag:',
choices = choice_vec
) ,

conditionalPanel(
condition = "new Date('2019/09/30') > new Date(input.date)",
pickerInput(
inputId = "assetclass",
label = "Asset casses:",
choices = c("class a", "class b", "class c"),
multiple = T
)
)

), # closes sidebarPanel

mainPanel( # Output in mainPabel

) # closes mainPanel

) # closes sidebarLayout

), # closes fluidPage

server = function(input, output) {



}

) # closes shinyApp

关于javascript - 使用 R Shiny 比较条件面板中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58319834/

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