在R中调用函数的动态解决方案



我正在尝试实现一个"动态的";R中的溶液。首先,我确实对4种不同的策略进行了投资组合优化:MV、CVaR、熵池和naive。

作为下一步,我想计算一些性能度量,比如HHI。

我现在的问题是:如何简化我的代码?如前所述,我得到了4种不同的策略,针对这些策略,我检索了4个不同的数据帧和相应的优化权重。当然有一个简化这一点的解决方案。

# call function
hhi_MV <- comp_HHI(weights_MV)
hhi_CVAR <- comp_HHI(weights_CVAR)
hhi_EP <- comp_HHI(weights_EP)
hhi_naive <- comp_HHI(weights_naive)

第一部分,即通过

portfolios <- list("MV", "CVAR", "EP", "naive")
paste0("hhi_", i (from portfolios list), sep="")

第二部分";comp_HHI";是一个函数,我将相应的权重数据帧移交给它。

另一个例子:

#### Compute Cumulative Return (can take a while) #####
perf_MV <- comp_perf(r = returns, w = weights_MV, fund = 100, freq = "months")
perf_CVAR <- comp_perf(r = returns, w = weights_CVAR, fund = 100, freq = "months")
perf_EP <- comp_perf(r = returns, w = weights_EP, fund = 100, freq = "months")
perf_naive <- comp_perf(r = returns, w = weights_naive, fund = 100, freq = "months")

使用前面介绍的代码,我计算了各个投资组合(comp_perf->函数(的性能,其中包括再平衡频率和用于计算最终财富的启动基金。我想简单地动态地实现代码:最好是一行代码。

perf_* <- comp_perf(r = returns, w = weights_*, fund = 100, freq = "months")

如上所述,我将动态地应用带有*符号的代码。换句话说,即在不同投资组合类型上具有循环的符号。

我的最后一个问题是关于以下代码:

# First compute returns from cumulative returns
return_MV <- monthlyReturn(xts(perf_MV$CumReturn[ ,-1], 
order.by = perf_MV$CumReturn[ ,1]))
return_CVAR <- monthlyReturn(xts(perf_CVAR$CumReturn[ ,-1], 
order.by = perf_CVAR$CumReturn[ ,1]))
return_EP <- monthlyReturn(xts(perf_EP$CumReturn[ ,-1], 
order.by = perf_EP$CumReturn[ ,1]))
return_naive <- monthlyReturn(xts(perf_naive$CumReturn[ ,-1], 
order.by = perf_naive$CumReturn[ ,1]))

是否还有一种动态实现的方法?

Thx提前。

目前尚不清楚如何生成权重对象,但将相关数据组合到列表中会容易得多。例如

weights <- list(MV=weights_MV, CVAR=weights_CVAR, EP=weights_EP, naive=weights_naive)

然后你可以在列表上应用一个函数

hh <- lapply(weights, comp_HHI)

您可以使用hh$MVhh[["MV"]]从列表中获取值

在你的第二个例子中,你会做

perf <- lapply(weights, function(x) comp_perf(r = returns, w = x, 
fund = 100, freq = "months"))

最好避免使用存储有数据的变量名。如果您有要在中执行相同操作的相关值,则它们应该在列表中。R使处理列表变得非常容易。尝试动态创建变量名称会更加混乱和容易出错,这也会使下游的一切都更加难以处理。

最新更新