我是R编程的新手,现在正在开发一个假设与R交互的系统。我的问题是:
如何从脚本硬编码中获取引号,而不是从“yahoo”,“google”等各种来源获取引号?
为什么我需要在脚本中硬编码的引号?
我使用Rserve作为我的下游系统,主系统会提取数据并执行其他组合检查,然后调用R-TTR-quantmod
包来计算财务数据。因此,我不希望R重新获取这些引号,因此我希望将引号硬编码并从我的系统发送到Rserve
,在那里执行它并从那里返回结果。这样我的代码就依赖于R上的标准计算,用户可以专注于其他业务逻辑。
为什么我不使用csv文件方法?
我在一个实时系统和文件io会花费大量时间并且会减慢我的系统。
例如:
library(quantmod)
library(TTR)
从雅虎拉出S& P500索引数据金融
getSymbols("^RIL", from="2000-01-01", to="2008-12-07")
计算RSI指标
rsi <- RSI(Cl(RIL),2)
所以这就是我需要的:
getSymbol
我想将数据作为一个传递
脚本中的变量。答案 0 :(得分:0)
我刚刚研究了一些使用load / save来缓存xts对象的代码。代码很简单:
getSymbols("^RIL", from="2000-01-01", to="2008-12-07")
save(RIL,file="cache/RIL.rdata")
然后在您执行分析的其他脚本中:
load("cache/RIL.rdata")
rsi <- RSI(Cl(RIL),2)
作为额外的奖励,.rdata文件被gzip压缩。
一些统计数据:图表1
我以前的方法有1分钟的条形,每天一个csv文件。 303个文件,总计12MB,加载到86,590行XTS对象花了5.64s(已经过去;用户时间是5.34s)。
.rdata文件为2.8MB,需要0.056秒。
图表2:
第一种方法:在数据上新鲜运行RSI(作为另一种计算的前传)。 第二种方法:让另一个离线进程对数据运行RSI,并将其缓存到.rdata文件。
加载RSI文件的速度比新计算RSI数据快3倍。
警告:在我的计时测试中,我使用了一个循环,它在第1遍创建/保存,然后在第2到第20遍加载。后者加载我是时间。所以它在任何操作系统文件缓存中都是新鲜的。