使用R语言Blotter包初始化多标的投资组合时遇错误
Blotter包多标的投资组合初始化错误解决
问题根源
你用select(symbol)提取标的列时,得到的是单列数据框,后续转成列表的方式生成了嵌套结构(比如list(symbol = c("A", "B"))),但initPortf需要的是每个元素对应单个标的的简单列表/字符向量,这种嵌套结构会导致环境赋值时触发错误。
修复方案
改用dplyr::pull()直接提取标的列的字符向量,这是最直接的解决方式:
修改后的代码
for (i in strategies) { # 用pull直接提取字符向量,无需嵌套列表 temp_symbols <- portfolio_txns %>% filter(strategy == i) %>% pull(symbol) print(i) print(temp_symbols) # 直接传字符向量即可,initPortf支持向量或简单列表 initPortf(i, temp_symbols, initDate = earliest_date, currency = "CAD") }
如果一定要传列表形式,在pull后加as.list()即可:
temp_symbol_list <- portfolio_txns %>% filter(strategy == i) %>% pull(symbol) %>% as.list()
为什么原来的写法不行?
你原来的select(symbol)返回的是数据框,用c()转换后得到的列表结构是list(symbol = c("标的1", "标的2"))——这是一个仅包含1个元素的列表,而这个元素是一个长度为2的向量。initPortf会把这个整个向量当作单个标的名称处理,自然会触发环境赋值的错误。
内容的提问来源于stack exchange,提问作者Kevin Muir
相关产品推荐
相关产品推荐

