我正在使用R
中的quantmod软件包从雅虎财务中提取历史数据。
要使用该包,我创建一个代码清单,如下所示:
symbols <- c("MSFT", "ORCL", "AAPL", "FB")
要获取历史数据,我称之为quantlib方法getSymbols:
try(getSymbols(sym, src="yahoo"))
这会在我的环境中创建名为MSFT
,ORCL
,APPL
和FB
的变量。
要计算MSFT和ORCL之间的相关性以及收盘价,我可以使用
cor(Cl(MSFT), Cl(ORCL))
获得:
ORCL.Close
MSFT.Close 0.6597159
我怎样才能使这个通用,以便我可以说20个符号并运行它们之间的相关性?
我不知道如何引用给定字符串的变量。即我有字符串“MFST”,我如何引用变量MSFT
?
我有字符串“MFST”和“ORCL”如何使用它来编写cor(Cl(MSFT), Cl(ORCL))
答案 0 :(得分:7)
最简单的方法是将数据存储在一个环境中,然后使用eapply
循环遍历环境中的所有对象:
library(quantmod)
dataEnv <- new.env()
getSymbols("MSFT;ORCL;AAPL;FB", env=dataEnv)
# Extract the close column from all objects,
# then merge all close columns into one object
cl <- do.call(merge, eapply(dataEnv, Cl))
# note the warning in the Details section of ?cor
# regarding the use of "pairwise.complete.obs"
cor(cl, use="pairwise.complete.obs")
# AAPL.Close ORCL.Close MSFT.Close FB.Close
# AAPL.Close 1.0000000 0.6467283 0.2528689 -0.5997337
# ORCL.Close 0.6467283 1.0000000 0.6597159 0.8211939
# MSFT.Close 0.2528689 0.6597159 1.0000000 0.8979836
# FB.Close -0.5997337 0.8211939 0.8979836 1.0000000
答案 1 :(得分:2)
get()
功能可以满足您的需求,例如get("MSFT")
。
通常,您可能最好将所有内容存储在列表中而不是全局环境中。如果你想对列表中的所有人做些什么让它更容易一些。我在this answer中更多地讨论了这个问题,但我确信那里有更好的讨论。
编辑:在这种情况下,将事物放在自己的环境中,而不是@Josh Ulrich的答案,而不是list
。