如何在启动时将 Rmetric 财务日历全局加载到 golem 中?
How do I globally load Rmetric Financial calendars into `golem` at the startup?
问题:
使用 load_rmetrics_calenders()
设置“全球”财务日历的最佳做法是什么?
即 golem 中函数的单数 运行?
背景:
这个问题是在找到可能的解决方案之前提出的。我正在使用我制作的函数,该函数使用 {bizdays}
包来确定某些财务日期。我需要使用函数 load_rmetrics_calenders()
来 initiate/set 日历,以便在 bizdayz::adjust.previous(..., cal = "Rmetrics/NYSE)
中进行后续调用。我知道我也可以使用全局设置来设置压延机,但这在过去给我带来了问题。
我希望在 golem 实例的开头执行一次 to 运行 load_rmetrics_calenders()
-- 而不是必须直接在函数中调用该函数,这会减慢它的速度。
代表:
my_function<- function(stock = NULL, from = NULL, to = NULL, ...){
# Set Biz Calender
# bizdays::load_rmetrics_calendars(year = c(1950:2030), financial = TRUE)
# DEFENSIVES ---------------------------------------------------------------------------------------------------
# Assign `to` --> yesterdays close, will reset when close data comes in, 12am
to <- bizdays::adjust.previous(Sys.Date() - 1, cal = "Rmetrics/NYSE")
我想在每次调用此函数时忽略设置日历,或者在 运行 在线时在 golemApp
实例中调用它。
可能的答案:
- 在
golem::runApp()
内执行 load_rmetrics_calenders()
--> 启动时执行一次
- 在充当 website/app
主页的 golem
模块的服务器内执行 load_rmetrics_calenders()
- 将日历嵌入到设置中? --> 不知道可行的解决方案
#1: 当前实施
# Just running the function within the `runApp()`
run_app <- function(
onStart = NULL,
options = list(),
enableBookmarking = NULL,
...
) {
#Configure financial calender
golem::cat_dev("Loading NYSE calender from Quantlib \n")
bizdays::load_quantlib_calendars(ql_calendars = "UnitedStates/NYSE", from = "1950-01-01", to = "2030-01-01")
golem::cat_dev("Done loading calender. \n")
# Configure global polished settings
polished_config()
reactlog::reactlog_enable()
with_golem_options(
app = brochureApp(
# Putting the resources here
golem_add_external_resources(),
# Add pages
welcomePage(),
# login(),
dashboard(),
# logout(),
terms(),
onStart = onStart,
options = options,
enableBookmarking = enableBookmarking,
wrapped = shiny::tagList
),
golem_opts = list(...)
)
}
#2: 在脚本中将其写入 运行 而不是调用 runApp()
即从 Docker
# .R file to be called instead of running run_app() explicitly
#Configure financial calender
golem::cat_dev("Loading NYSE calender from Quantlib \n")
bizdays::load_quantlib_calendars(ql_calendars = "UnitedStates/NYSE", from = "1950-01-01", to = "2030-01-01")
golem::cat_dev("Done loading calender. \n")
# Configure global polished settings
polished_config(...)
reactlog::reactlog_enable()
# Run app with the calendar loaded
run_app()
您可以在 run_app()
函数启动之前 运行 函数,并将结果作为参数传递给 run_app()
函数。
例如:https://github.com/inrae/diades.atlas/blob/main/app.R#L30,在这里,我构建了一系列元素并将它们传递给 run_app(),所以它 运行 不那么频繁(在这里,每次新应用程序在 RStudio Connect 中启动。
如果您希望在每个闪亮的会话中启动该功能,您也可以在服务器顶部进行设置(但我想这不是您想要的)。
因此,这取决于您的部署逻辑:
如果你正在部署一个容器,你可以使用(这里是伪代码):CMD R -e "myapp::run_app(data = mypak:build_stuff())"
。请注意,这将取决于您使用的容器管理服务。例如 Shiny Proxy 会 运行 每个用户一个容器,所以每次有新用户来时都会调用 build_stuff()
。
如果您使用的是 RStudio 产品,则可以使用链接的 GitHub 代码中的 run_app() 方法。
如果您需要探索 {golem}
应用程序的行为以及什么时候发生 运行,我这里有一个玩具示例 https://github.com/ColinFay/golemexamples/tree/master/golemloadorder 可以让您知道什么时候发生run/loaded.
干杯,
科林
问题:
使用 load_rmetrics_calenders()
设置“全球”财务日历的最佳做法是什么?
即 golem 中函数的单数 运行?
背景:
这个问题是在找到可能的解决方案之前提出的。我正在使用我制作的函数,该函数使用 {bizdays}
包来确定某些财务日期。我需要使用函数 load_rmetrics_calenders()
来 initiate/set 日历,以便在 bizdayz::adjust.previous(..., cal = "Rmetrics/NYSE)
中进行后续调用。我知道我也可以使用全局设置来设置压延机,但这在过去给我带来了问题。
我希望在 golem 实例的开头执行一次 to 运行 load_rmetrics_calenders()
-- 而不是必须直接在函数中调用该函数,这会减慢它的速度。
代表:
my_function<- function(stock = NULL, from = NULL, to = NULL, ...){
# Set Biz Calender
# bizdays::load_rmetrics_calendars(year = c(1950:2030), financial = TRUE)
# DEFENSIVES ---------------------------------------------------------------------------------------------------
# Assign `to` --> yesterdays close, will reset when close data comes in, 12am
to <- bizdays::adjust.previous(Sys.Date() - 1, cal = "Rmetrics/NYSE")
我想在每次调用此函数时忽略设置日历,或者在 运行 在线时在 golemApp
实例中调用它。
可能的答案:
- 在
golem::runApp()
内执行load_rmetrics_calenders()
--> 启动时执行一次 - 在充当 website/app 主页的
- 将日历嵌入到设置中? --> 不知道可行的解决方案
golem
模块的服务器内执行 load_rmetrics_calenders()
#1: 当前实施
# Just running the function within the `runApp()`
run_app <- function(
onStart = NULL,
options = list(),
enableBookmarking = NULL,
...
) {
#Configure financial calender
golem::cat_dev("Loading NYSE calender from Quantlib \n")
bizdays::load_quantlib_calendars(ql_calendars = "UnitedStates/NYSE", from = "1950-01-01", to = "2030-01-01")
golem::cat_dev("Done loading calender. \n")
# Configure global polished settings
polished_config()
reactlog::reactlog_enable()
with_golem_options(
app = brochureApp(
# Putting the resources here
golem_add_external_resources(),
# Add pages
welcomePage(),
# login(),
dashboard(),
# logout(),
terms(),
onStart = onStart,
options = options,
enableBookmarking = enableBookmarking,
wrapped = shiny::tagList
),
golem_opts = list(...)
)
}
#2: 在脚本中将其写入 运行 而不是调用 runApp()
即从 Docker
# .R file to be called instead of running run_app() explicitly
#Configure financial calender
golem::cat_dev("Loading NYSE calender from Quantlib \n")
bizdays::load_quantlib_calendars(ql_calendars = "UnitedStates/NYSE", from = "1950-01-01", to = "2030-01-01")
golem::cat_dev("Done loading calender. \n")
# Configure global polished settings
polished_config(...)
reactlog::reactlog_enable()
# Run app with the calendar loaded
run_app()
您可以在 run_app()
函数启动之前 运行 函数,并将结果作为参数传递给 run_app()
函数。
例如:https://github.com/inrae/diades.atlas/blob/main/app.R#L30,在这里,我构建了一系列元素并将它们传递给 run_app(),所以它 运行 不那么频繁(在这里,每次新应用程序在 RStudio Connect 中启动。
如果您希望在每个闪亮的会话中启动该功能,您也可以在服务器顶部进行设置(但我想这不是您想要的)。
因此,这取决于您的部署逻辑:
如果你正在部署一个容器,你可以使用(这里是伪代码):
CMD R -e "myapp::run_app(data = mypak:build_stuff())"
。请注意,这将取决于您使用的容器管理服务。例如 Shiny Proxy 会 运行 每个用户一个容器,所以每次有新用户来时都会调用build_stuff()
。如果您使用的是 RStudio 产品,则可以使用链接的 GitHub 代码中的 run_app() 方法。
如果您需要探索 {golem}
应用程序的行为以及什么时候发生 运行,我这里有一个玩具示例 https://github.com/ColinFay/golemexamples/tree/master/golemloadorder 可以让您知道什么时候发生run/loaded.
干杯, 科林