【问题标题】:Using lapply in R when there isn't a function?没有函数时在 R 中使用 lapply?
【发布时间】:2016-05-18 21:21:03
【问题描述】:

我正在从雅虎提取 15 个符号的 ETF 数据,并且即将编写相同的代码行 15 次。我已经阅读了lapply,但在这种情况下未能掌握它。

加载我的getSymbols 文件后,我已经启动了下面前两个符号的代码,但是会复制和粘贴,然后更改符号,15 次。我知道必须有一种方法可以使用lapply 或类似的东西来完成这些步骤......

library(quantmod)
library(tseries)
library(PerformanceAnalytics)
library(xts)
library(timeSeries)
library(TTR)

#load asset class symbols and data
loadSymbolLookup(file="assetclassymbols.rda")
getSymbols(c("ACWI","ITOT","IJR","EFA","EEM","AGG","MUB","TIP","TLH","TLT","HYG","EMB","IYR","GSG","GLD"))

#pull adjusted close value for a specific time period
ACWI.adj=Ad(ACWI)['2015-12-31::2016']
AGG.adj=Ad(AGG)['2015-12-31::2016']
#REPEAT FOR EACH SYMBOL

#calculate returns for the specific time period and remove prior-period "NA" row
ACWI.return=Return.calculate(ACWI.adj)
AGG.return=Return.calculate(AGG.adj)
ACWI.return=ACWI.return[-c(1)]
AGG.return=AGG.return[-c(1)]
#REPEAT FOR EACH SYMBOL

#merge asset class return streams to a single dataset
asset.returns=(merge(ACWI.return,AGG.return)) #...CONT. MERGING ALL SYMBOLS.return
colnames(asset.returns)=c("ACWI","AGG") #...CONT. LIST OF ALL SYMBOLS

我的目标是完成一个包含所有符号作为列标题的数据集,并计算每一行的回报。

【问题讨论】:

    标签: r lapply performanceanalytics


    【解决方案1】:

    您可以在lapplyFUN 参数中定义匿名函数,

    syms <- c("ACWI","ITOT","IJR","EFA","EEM","AGG","MUB",
              "TIP","TLH","TLT","HYG","EMB","IYR","GSG","GLD")
    
    
    lapply(syms, function(s) 
      Return.calculate(Ad(getSymbols(s, auto.assign = FALSE)
                          )['2015-12-31::2016'])[-1L])
    

    【讨论】:

    • 每当我尝试使用 lapply 查找 Ad (Adjusted) price 列时出现此错误:Ad(s) 错误:下标越界:没有包含“Adjusted”的列名
    • 您是正确的,Ad(ACWI) 有效。但引号失败,as.name 失败。
    • @KennethK。见更新。我忘了quantmod 是一个很奇怪的包;使用auto.assign选项让它表现得更像一个普通的包(这样我们就可以使用var_name &lt;- getSymbols("IJR")xts对象分配给var_name而不是在环境中创建变量IJR,当前默认,这几乎不可能以编程方式使用)。另一种方法是运行Ad(get(getSymbols(s))),但这会使您的命名空间变得混乱。
    • 不会想到这一点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多