0

我很难弄清楚如何实际实施一个具有大量脚本的项目(需要以特定顺序执行,因为一个脚本的输出成为另一个脚本的输入),每个脚本都有许多假设。

最初该项目打算有许多脚本,但是假设所有假设都是用特定数字硬编码的;换句话说,最初只考虑了一种情况。

当我开始实验时,我首先调整了某些假设,并且在脚本中调整了假设,该脚本生成了一个将由后续脚本使用的数据文件,我只是更改了该文件的名称(在创建文件的脚本和使用该文件的脚本)。

没过多久我就意识到这个过程不是最理想的,特别是如果我想测试各种各样的场景(即,跨各种脚本的不同假设组合)。

理想情况下,我想做的是创建一个 R 文件(一个“假设”文件),其中包含每个假设的可能性列表。每个假设都可以有任意数量的可能性。我希望能够在整个脚本系列中运行可能假设的每种组合,其输出清楚地识别选择的每个假设和最终输出。

为了更好地说明,请考虑下面的玩具示例:

假设脚本 (assumptions.R)

script_1_assumptions_1 <- list(
  "Assumption_1" = 2,
  "Assumption_2" = 4,
  "Assumption_3" = 6
)

script_1_assumptions_2 <- list(
  "Assumption_1" = 3,
  "Assumption_2" = 6
)

script_2_assumptions_1 <- list(
  "Assumption_1" = 5,
  "Assumption_2" = 10
)

脚本 1 (sample_script_1.R)

script_1_assumption_1 <- script_1_assumptions_1$Assumption_1
script_1_assumption_2 <- script_1_assumptions_2$Assumption_1

script_1_output <- script_1_assumption_1 + script_1_assumption_2
saveRDS(script_1_output, "script_1_output")

脚本 2 (sample_script_2.R)

script_1_output <- readRDS("script_1_output")
script_2_assumption_1 <- script_2_assumptions_1$Assumption_1

script_2_output <- script_1_output * script_2_assumption_1
print(script_2_output)

启动脚本

source("assumptions.R")
source("sample_script_1.R")
source("sample_script_2.R")

按照目前的结构,如果我运行启动脚本,只会打印出一个值(即,一次只运行一个场景)。我如何重构上面的代码,以便在执行启动脚本时,它可以获得假设脚本中每个假设组合的输出(在本例中为 12 种不同的组合)。我知道该expand.grid()函数会为每个可能的组合创建一个数据框,但是我怎样才能将这些组合中的每一个注入两个脚本的相关部分。

注意:仅出于实际情况,实际用例是一个投资分配模型,它有一个分配模型和一个投资组合模型。这些模型的脚本需要分开保存,因为它们的功能非常不同。分配模型包含与资产分配策略(例如动量类型等)严格相关的各种假设,而投资组合模型获取分配模型的输出(分配)并做出投资决策。投资组合模型也有各种假设(例如,杠杆等)。与上面的玩具示例一样,目标是拥有一个主假设脚本,指定所有可能的假设,然后为每个组合运行整个多脚本项目。

我被困住了,所以任何和所有的帮助都将不胜感激!

4

0 回答 0