【问题标题】:R convert string to variableR将字符串转换为变量
【发布时间】:2014-10-27 16:37:23
【问题描述】:

我正在使用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))

【问题讨论】:

  • get("MSFT") 会给你变量MSFT。也就是说,您最好将这些中的每一个都放在一个列表中,这样您就可以为所有这些都做好apply 的事情。
  • @Gregor,哇,你是对的。很简单,但我不知道如何搜索。能否请您将其放在答案中以便我接受?

标签: r quantmod


【解决方案1】:

最简单的方法是将数据存储在环境中,然后用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

【讨论】:

  • 很好的答案,谢谢!我真的很喜欢提供自己的环境的想法
【解决方案2】:

get() 函数可以满足您的需求,例如get("MSFT").

通常,您最好将所有内容存储在列表中而不是全局环境中。如果您想对所有人做某事,将它们放在一个列表中会更容易一些。我在this answer 中对此进行了更多讨论,但我确信那里有更好的讨论。

编辑:在这种情况下,而不是list,将事物放在他们自己的环境中,就像@Josh Ulrich 的答案可能是最好的。

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 2015-08-13
    • 1970-01-01
    • 2016-04-26
    • 2010-09-30
    • 2015-10-03
    相关资源
    最近更新 更多