2011-06-28 38 views
3

我已经完全没有通过RSRuby和R与HoltWinters函数一起工作。您究竟如何1)通过RSRuby创建时间序列对象,以及2)是否成功地将该对象传递给HoltWinters获得输出?如何通过RSRuby将ts对象传递给R

实施例:

@r = RSRuby.instance 
=> #<RSRuby:0x106bfe6c0 @proc_table={}, @class_table={}, @default_mode=-1, @cache={"get"=>#<RObj:0x106bfe580>, "helpfun"=>#<RObj:0x106bfd3d8>, "help"=>#<RObj:0x106bfd3d8>, "NaN"=>NaN, "FALSE"=>false, "TRUE"=>true, "F"=>false, "NA"=>-2147483648, "eval"=>#<RObj:0x106bfdf18>, "T"=>true, "parse"=>#<RObj:0x106bfe0d0>}, @caching=true> 
@r.assign('mytime',@r.ts(:data => [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34], :frequency => 12, :start => [1993,3], :end => [1995,3])) 
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25] 
@r.HoltWinters(@r.mytime) 
    RException: Error in decompose(ts(x[1L:wind], start = start(x), frequency = f), seasonal) : 
    time series has no or less than 2 periods 

rsruby(0.5.1.1)

ř版本2.12.2(2011-02-25)

平台:x86_64的-苹果darwin9.8.0/x86_64的(64位)

:编辑:内R A类似的例子只是......如果我能得到通过RSRuby从HoltWinters任何输出(除错误),我会很HAP py

> z <- ts(1:34, frequency = 12, start = c(1993,3), end = c(1995,3)) 
> z 
    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
1993   1 2 3 4 5 6 7 8 9 10 
1994 11 12 13 14 15 16 17 18 19 20 21 22 
1995 23 24 25          
> HoltWinters(z) 
Holt-Winters exponential smoothing with trend and additive seasonal component. 

Call: 
HoltWinters(x = z) 

Smoothing parameters: 
alpha: 1 
beta : 0 
gamma: 0 

Coefficients: 
      [,1] 
a 2.500000e+01 
b 1.000000e+00 
s1 -8.141636e-16 
s2 -8.141636e-16 
s3 9.621933e-16 
s4 2.738550e-15 
s5 -8.141636e-16 
s6 -8.141636e-16 
s7 7.401487e-17 
s8 -8.141636e-16 
s9 9.621933e-16 
s10 -8.141636e-16 
s11 -8.141636e-16 
s12 9.621933e-16 
+0

我从来没有使用R,但如果检查等效的R代码是否有效方便,那么您可能需要这样做。如果等效的R代码有效,那么您可能需要在问题中发布该代码。 –

+0

在R中添加了一个与RSRuby中的示例匹配的示例。除非在RSRuby中使用HoltWinters的错误(我在RSRuby中使用的其他少数几个方法,如t_test正常工作,不能为所有这些方法担保),否则我们很乐意看到任何输出。谢谢 – Charles

回答

3

如果我正确理解你的问题,你真的在​​寻找使用特定接口的指导。前面,让我告诉你,我不使用RSRuby,但是我为R和Ruby集成使用了不同的实用程序。

经过进一步的检查,我看到你真的想要一个时间序列选项......我相信...是的,可以很容易地通过使用as.ts(data_frame) fxn从数据框中产生。
http://stat.ethz.ch/R-manual/R-patched/library/stats/html/ts.html

我用过的很简单。如果这是一个主要问题,那么这可能对您有用。

require 'rserve/simpler' 
r_object = Rserve::Simpler.new 

我要做接下来就是其中的键对应数据框中列,和值是数组采取了乱码,我对它们运行Rserve::Simpler FXN Hash.to_dataframe让他们准备好要转换。

data = Hash.new()#insert data here 
datafr = data.to_dataframe 
r_object.converse(df: datafr) do 
    %Q{df$time <- strptime(as.character(df$time), "%Y-%m-%d %X") 
    df$name <- factor(df$name) 
    } 
end 

这使用在相反的块直R代码里面,并很好地处理一切。我没有在你的特定问题上尝试过,但我知道这适用于我从数组中导入时间数据(Ruby Datetime类)到R中,以便我可以绘制它。祝你好运!

+0

感谢您花时间回答。我将能够明天测试,然后再回复。看起来我需要将此示例按摩到RSRuby语法中,但它可能会诀窍。 – Charles

+0

@Charles你试过这个吗?或者做了其他事情最终为你工作?我没有听到,好奇心正在杀死我! – Ryanmt

+0

Hi @Ryanmt,是否可以直接使用RserverSimpler调用R文件并将结果返回给ruby? – massinissa