R将字符串转换为变量

时间:2014-10-27 16:37:23

标签: r quantmod

我正在使用R中的quantmod软件包从雅虎财务中提取历史数据。

要使用该包,我创建一个代码清单,如下所示:

symbols <- c("MSFT", "ORCL", "AAPL", "FB")

要获取历史数据,我称之为quantlib方法getSymbols:

try(getSymbols(sym, src="yahoo"))

这会在我的环境中创建名为MSFTORCLAPPLFB的变量。

要计算MSFT和ORCL之间的相关性以及收盘价,我可以使用

cor(Cl(MSFT), Cl(ORCL))

获得:

           ORCL.Close
MSFT.Close  0.6597159

我怎样才能使这个通用,以便我可以说20个符号并运行它们之间的相关性?

我不知道如何引用给定字符串的变量。即我有字符串“MFST”,我如何引用变量MSFT

我有字符串“MFST”和“ORCL”如何使用它来编写cor(Cl(MSFT), Cl(ORCL))

2 个答案:

答案 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