[英]Accessing objects of environment in R using quantmod library
我有一些R的经验,但到目前为止从未使用过我自己的环境。 在过去的几个月里,我不得不经常使用自己的环境,我对它有一些疑问。
quantmod
为什么我们使用getSymbols
OHLC对象加载到环境中? 拥有来自getSymbols
的新环境,即
tick = c( "VNO" , "VMC" , "WMT" , "WAG")
data.env <- new.env() start<-as.Date("2013-01-01")
getSymbols(tick,env=data.env,src="yahoo",from=start)
我们如何有效地访问data.env中的成员,例如,如果我们想检查data.env中的所有成员是否是OHLC对象,我们可以执行以下操作: is.OHLC(data[[all elements]])
?
此外,对于上述数据示例,我如何计算此类投资组合的风险价值。 我的想法是来自PerformanceAnalytics
库的函数VaR
。 VaR
的帮助页面称为“xts,vector,matrix,dataframe,timeSeries或zoo对象的资产返回”。 为此,我想使用dailyReturn
来获取返回值,然后可以将其用于函数VaR
。 但是, dailyReturn
需要一个OHLC对象作为参数。 因此,只要我知道如何将data.env
的元素data.env
为OHLC矩阵,我就可以计算出VaR
将环境用作“数据容器”的主要原因是因为它比其他环境快得多,对吧?
不,我认为主要原因是保持清洁,避免覆盖全球环境中的对象。 (此外,将所有“新”对象作为“捆绑”而不是几个单独的对象。为此,列表也可以用,但请参阅下面列表和环境之间的差异。)通过调用getSymbols,创建了四个新对象:
"VMC" "VNO" "WAG" "WMT"
如果在全局环境(即工作空间)中创建了这些对象,则将覆盖具有相同名称的任何预先存在的对象。 (当您使用load
时会发生这种情况...例如,您在工作区中有x
并且还保存在名为“x.rda”的文件中。 load("x.rda")
,工作区中的x
的先前版本是丢失。)
环境与普通的R对象不同 - 因为您可以使用指向同一环境的不同名称。 例如,如果x是R中的任何类型的对象,则分配y <- x
会创建y <- x
的副本。 不适用于环境:
> ls(data.env)
[1] "VMC" "VNO" "WAG" "WMT"
> yummy <- data.env
> yummy$x <- "bingo"
> ls(data.env)
[1] "VMC" "VNO" "WAG" "WMT" "x"
> data.env$x
[1] "bingo"
> data.env$x <- "Florida"
> yummy$x
[1] "Florida"
> with(yummy, rm(x))
> ls(data.env)
[1] "VMC" "VNO" "WAG" "WMT"
这里当我们分配yummy <- data.env
我们不会创建data.env的副本,而是创建另一个指向同一对象的指针。 因此,当我们在yummy
执行某些操作时, data.env
也会发生同样的事情。
我们如何有效地访问data.env中的成员,例如,如果我们想检查data.env中的所有成员是否是OHLC对象,我们可以执行以下操作:is.OHLC(data [[all elements]])?
如上所述, eapply
就是答案, - 如果您愿意,可以使用unlist
将结果列表转换为avector:
unlist(eapply(data.env, is.OHLC))
最后,您可以直接将对象提取到工作区,如下所示:
getSymbols(tick,env=.GlobalEnv,src="yahoo",from=start)
对于大多数目的而言,这可能并不慢,但缺点是你不能轻易地一起访问这四个新对象(例如,删除它们,或者eapply
某些东西)。 在执行此操作之前,您必须确保在工作区中没有任何值得的东西,因为可能会覆盖所有内容。
正如Roman所建议的那样,检查数据环境中某个对象是否为OHLC对象的最简单方法是使用eapply,如下所示:
eapply(data.env,is.OHLC)
它返回数据环境中对象的列表,如果是OHLC对象则返回逻辑值。 如果你想看一个更紧凑的形式,你可以在表达式周围包含"str"
。 例如,要查看当前数据环境中的哪些对象是OHLC对象,我可以执行以下操作:
> str(eapply(data,is.OHLC))
List of 9
$ VXZlong : logi TRUE
$ prices : logi FALSE
$ XIVlong : logi TRUE
$ dates : logi FALSE
$ VXXlong : logi TRUE
$ weight : logi FALSE
$ ZIVlong : logi TRUE
$ symbolnames : logi FALSE
$ execution.price: logi FALSE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.