我是R编程的新手,现在正在开发一个应该与R交互的系统。
如何从脚本中获取硬编码的引用,而不是从"雅虎"谷歌"等各种来源获取报价?
为什么我需要在脚本中硬编码引号?
我使用 Rserve 作为我的下游系统,主系统获取数据并将执行其他投资组合检查,然后它调用R-TTR-quantmod
包来计算财务数字。所以我不希望 R 重新获取这些报价,所以我希望报价被硬编码并从我的系统发送到执行它并从那里返回结果的Rserve
。这样,我的代码将依赖于 R 上的标准计算,用户可以专注于其他业务逻辑。
为什么我不使用 csv 文件方法?
我在一个实时系统中,文件 io 会花费大量时间,并且会减慢我的系统速度。
例如:
library(quantmod)
library(TTR)
从雅虎财经提取标准普尔500指数数据
getSymbols("^RIL", from="2000-01-01", to="2008-12-07")
计算 RSI 指标
rsi <- RSI(Cl(RIL),2)
所以这就是我需要的:
- 与其调用
getSymbol
,不如将数据作为变量。 - 我假设数据有时可能非常大,有时可能非常小。
- 那么在这种情况下我应该怎么做呢?
我刚刚在研究一些代码来使用加载/保存来缓存 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.64 秒(已过;用户时间为 5.34 秒)。
.rdata文件为2.8MB,需要0.056s。
图表2:
第一种方法:对数据重新运行 RSI(作为另一个计算的前导标)。第二种方法:让另一个脱机进程对数据运行 RSI,并将其缓存到 .rdata 文件中。
加载 RSI 文件比重新计算 RSI 数据快 3 倍。
警告:在我的计时测试中,我使用了一个循环,在通道 1 上创建/保存它,然后在通道 2 到 20 上加载。这是我计时的后一种装载。因此,它在任何操作系统文件缓存中都是新鲜的。