2011-06-28 20 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

相關問題