首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态构建blotter投资组合名称

动态构建blotter投资组合名称
EN

Stack Overflow用户
提问于 2013-12-26 21:18:41
回答 1查看 134关注 0票数 0

我有一些我写了一段时间的代码,它使用了4个文件夹。我想修改这段代码,以便在MySymbols列表中定义条目时使用尽可能多的投资组合。在下面的代码中,我首先展示了过去的工作,就是显式地写出4个投资组合的名称。在第二部分中,我尝试将其转换为动态构造名称的循环。名称似乎是正确的,但R找不到投资组合,我看到警告消息:

代码语言:javascript
复制
1: In rm(Str1, pos = .blotter) : object 'Str1' not found
2: In rm(Str1, pos = .blotter) : object 'Str1' not found
3: In rm(Str1, pos = .blotter) : object 'Str1' not found
4: In rm(Str1, pos = .blotter) : object 'Str1' not found

未找到或删除投资组合:

代码语言:javascript
复制
> ls(.blotter)
[1] "portfolio.Port1" "portfolio.Port2" "portfolio.Port3" "portfolio.Port4"

我在这里做错什么了?如何让R使用我在Str1中构造的名称?

代码语言:javascript
复制
library(blotter)

Date_Start = "2000-01-01"
InitialEquity = 100000
currency("USD")

MyPortfolios = c("Port1", "Port2", "Port3", "Port4")

MySymbols = list()
MySymbols[[1]]= c("AAPL","GOOG")
MySymbols[[2]]= c("BAC","GS")
MySymbols[[3]]= c("CVX","XOM")
MySymbols[[4]]= c("TWTR","FB")
CashSymbol = "SHY"

ls(.blotter)

suppressWarnings(rm("account.Test1", pos = .blotter))
suppressWarnings(rm("portfolio.Port1", pos = .blotter))
suppressWarnings(rm("portfolio.Port2", pos = .blotter))
suppressWarnings(rm("portfolio.Port3", pos = .blotter))
suppressWarnings(rm("portfolio.Port4", pos = .blotter))

ls(.blotter)

initPortf(MyPortfolios[1], as.list( c(MySymbols[[1]], CashSymbol)), initDate = Date_Start)
initPortf(MyPortfolios[2], as.list( c(MySymbols[[2]], CashSymbol)), initDate = Date_Start)
initPortf(MyPortfolios[3], as.list( c(MySymbols[[3]], CashSymbol)), initDate = Date_Start)
initPortf(MyPortfolios[4], as.list( c(MySymbols[[4]], CashSymbol)), initDate = Date_Start)

initAcct("Test1", MyPortfolios, initDate = Date_Start, initEq = InitialEquity)

ls(.blotter)



# Do the same thing in a loop
NumPorts = length(MySymbols)
MyPorts=NULL

suppressWarnings(rm("account.Test1", pos = .blotter))

for (i in 1:NumPorts){
  stock(MySymbols[[i]], currency = "USD", multiplier = 1)
  MyPorts = c(MyPorts, paste0("Port",i))
}

ls(.blotter)

for (i in 1:NumPorts){
  Str1 = paste0("portfolio.", MyPorts[i])
  print(Str1)
#   suppressWarnings(rm(Str1, pos = .blotter))
  rm(Str1, pos = .blotter)
}

ls(.blotter)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-26 22:25:37

下面是这个问题的一个例子

代码语言:javascript
复制
> e1 <- new.env(parent = baseenv()) # create a new environment e1
> assign("obj", 1, envir = e1) # create object 'obj' in e1
> ls(e1)
[1] "obj"

> str1 <- "obj" # character vector containing "obj" (in the global environment)
> rm(str1, envir = e1) # this doesn't work
Warning message:
In rm(str1, envir = e1) : object 'str1' not found

> ls(e1)
[1] "obj"

这种方法不起作用,因为rm的第一个参数必须是对象本身的名称。在str1中没有对象e1

如果要使用字符向量,则必须使用list参数:

代码语言:javascript
复制
> rm(list = str1, envir = e1)
> ls(e1)
character(0)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20791400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档