我在R方面有一些经验,但到目前为止从未使用过我自己的环境。在过去的几个月里,我不得不经常使用自己的环境,我对它有一些疑问。
quantmod
为什么我们要使用OH加载OHLC对象
getSymbols
?拥有来自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]])
吗?
此外,对于上述数据示例,我如何计算此类投资组合的风险价值。我的想法是来自VaR
库的函数PerformanceAnalytics
。 VaR
的帮助页面作为参数说明:&#34;资产的xts,vector,matrix,dataframe,timeSeries或zoo对象返回&#34;。为此,我想使用dailyReturn
来获取返回值,然后可以将其用于函数VaR
。但是dailyReturn
需要OHLC对象作为参数。因此,只要我知道如何将VaR
中的元素转换为OHLC矩阵,我就可以计算data.env
答案 0 :(得分:2)
使用环境的主要原因是&#34;数据容器&#34;是 因为它比其他人快得多,对吧?
不,我认为主要原因是要保持清洁,避免覆盖全球环境中的对象。 (此外,要将所有&#34;新&#34;对象作为&#34;捆绑&#34;而不是几个单独的对象。为此,列表也可用,但请参阅下面列表之间的差异和环境。)通过调用getSymbols,可以创建四个新对象:
"VMC" "VNO" "WAG" "WMT"
如果在全局环境(aka工作区)中创建了这些对象,则将覆盖任何具有相同名称的预先存在的对象。 (当您使用load
时会发生这种情况...例如,您在工作区中有x
并且还保存在名为&#34; x.rda&#34;的文件中。{{1}之后您工作区中先前版本的load("x.rda")
将丢失。)
环境与普通的R对象不同 - 因为您可以使用指向同一环境的不同名称。例如,如果x是R中的任何类型的对象,则分配x
会创建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"
时,我们不创建data.env的副本,而只是创建另一个指向同一对象的指针。因此,当我们在yummy <- data.env
中执行某些操作时,同样会在yummy
中发生。
我们如何有效地访问data.env中的成员,例如如果我们想 检查data.env中的所有成员是否都是OHLC对象,我们可以做些什么 喜欢:is.OHLC(数据[[所有元素]])?
如上所述,data.env
就是答案, - 如果您愿意,可以使用eapply
将结果列表转换为avector:
unlist
最后,您可以直接将对象提取到工作区,如下所示:
unlist(eapply(data.env, is.OHLC))
对于大多数用途来说,这可能并不慢,但缺点是你不能轻易地同时访问这四个新对象(例如,删除它们,或getSymbols(tick,env=.GlobalEnv,src="yahoo",from=start)
某些东西) 。在你这样做之前,你必须确保你的工作区中没有任何值得的东西,因为可能一切都可以被覆盖。
答案 1 :(得分:1)
正如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