2013-02-14 5 views
5

का उपयोग करके आर मूल्यांकन से परिणाम प्राप्त करें मैं आरआरएटी 1.5 का उपयोग कर रहा हूं ताकि ARIMA का उपयोग करके एक साधारण पूर्वानुमान करने का प्रयास किया जा सके। मैंने आर 2.14 और आर 2.15 के साथ कोशिश की है।आर.Net

string rhome = System.Environment.GetEnvironmentVariable("R_HOME"); 
     if (string.IsNullOrEmpty(rhome)) 
      rhome = @"C:\Program Files\R\R-2.14.0"; 

     System.Environment.SetEnvironmentVariable("R_HOME", rhome); 
     System.Environment.SetEnvironmentVariable("PATH", System.Environment.GetEnvironmentVariable("PATH") + ";" + rhome + @"\bin\x64"); 
     using (REngine engine = REngine.CreateInstance("RDotNet")) 
     { 

      engine.Initialize(); 

      NumericVector testGroup = engine.CreateNumericVector(submissions); 
      engine.SetSymbol("testGroup", testGroup); 
      engine.Evaluate("testTs <- c(testGroup)"); 
      NumericVector ts = engine.GetSymbol("testTs").AsNumeric(); 

      engine.Evaluate("tsValue <- ts(testTs, frequency=1, start=c(2010, 1, 1))"); 
      engine.Evaluate("library(forecast)"); 
      engine.Evaluate("arimaFit <- auto.arima(tsValue)"); 
      engine.Evaluate("fcast <- forecast(tsValue, h=36)"); 
      engine.Evaluate("plot(fcast)"); 

      NumericVector nv = engine.GetSymbol("fcast").AsNumeric(); 

यह विफल रहता है: मैं Visual Studio 2012 लक्ष्य .NET 4 हालांकि मैं भी कोशिश की है .NET 4.5 और विजुअल स्टूडियो 2010

यहाँ उपयोग कर रहा हूँ कोड का एक टुकड़ा मैं लिखा है है जब मैं संख्यात्मक वेक्टर को पुनः प्राप्त करने का प्रयास करता हूं। टीआई को यहां कुछ त्रुटियां मिलती हैं। पहला "त्रुटि: ऑब्जेक्ट को 'डबल' टाइप करने के लिए मजबूर नहीं किया जा सकता है और दूसरा" त्रुटि: एक्सेस उल्लंघन उल्लंघन - देखभाल के साथ जारी रखें "

यदि मैं जेनेरिक वेक्टर के रूप में पूर्वानुमान पुनर्प्राप्त करता हूं तो मुझे RDotNet की एक सूची मिलती है। SymbolicExpressions। मैंने उन लोगों के माध्यम से देखा है कि वे क्या देख रहे हैं और ऐसा लगता है कि यह एरियामा फ़ंक्शन से संबंधित है लेकिन मैं वास्तविक पूर्वानुमान आउटपुट का पता नहीं लगा सकता। मैं इनपुट और अन्य संबंधित मानों के साथ-साथ संख्याओं की सूचियों का एक समूह भी पा सकता हूं जो मैं निर्धारित नहीं कर सकता कि वे क्या हैं।

यदि मैं क्रांति के भीतर स्क्रिप्ट चलाता हूं तो मैं देख सकता हूं कि आउटपुट क्या होना चाहिए और इस तरह मैं यह निर्धारित कर रहा हूं कि आर.Net से आउटपुट सटीक हैं या नहीं। मुझे लगता है कि यह संभव है कि आर.Net क्रांति की तुलना में अलग-अलग पूर्वानुमान कर रहा है (हालांकि, मुझे लगता है) और जेनेरिकवेक्टर में आउटपुट में से एक वास्तव में सही आउटपुट है।

यहां जेनेरिक वेक्टर प्रारंभिकता है। मैं एक कंबल प्रयास में लपेटा, बस डीबगिंग उद्देश्यों के लिए पकड़ो: डायनामिक वेक्टर के अंदर जहां मैं वास्तव में विवरण का निरीक्षण कर सकता हूं।

GenericVector newVector = engine.GetSymbol("fcast").AsList(); 

      foreach (var vector in newVector) 
      { 
       try 
       { 
        DynamicVector dv = vector.AsVector(); 
       } 
       catch (Exception) 
       { 
       } 

उत्तर

5

यह आर.Net समस्या नहीं है, तो आप बस गलत स्क्रिप्ट चलाने का प्रयास करें। forecast को

> testTs <- c(1, 2, 3) 
> tsValue <- ts(testTs, frequency=1, start=c(2010, 1, 1)) 
> library("forecast") 
> arimaFit <- auto.arima(tsValue) 
> fcast <- forecast(tsValue, h=36) 
> plot(fcast) 

अब class(fcast) के बराबर होती है: शुद्ध आर पर अपने कोड चलाते हैं

> class(fcast) 
[1] "forecast" 
> as.numeric(fcast) 
Error: (list) object cannot be coerced to type 'double' 

fcast strucure:

> str(fcast) 
List of 11 
$ method : chr "Mean" 
$ level : num [1:2] 80 95 
$ x  : Time-Series [1:3] from 2010 to 2012: 1 2 3 
$ xname : chr "object" 
$ mean  : Time-Series [1:36] from 2013 to 2048: 2 2 2 2 2 2 2 2 2 2 ... 
$ lower : mts [1:36, 1:2] -0.177 -0.177 -0.177 -0.177 -0.177 ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : NULL 
    .. ..$ : chr [1:2] "80%" "95%" 
    ..- attr(*, "tsp")= num [1:3] 2013 2048 1 
    ..- attr(*, "class")= chr [1:2] "mts" "ts" 
$ upper : mts [1:36, 1:2] 4.18 4.18 4.18 4.18 4.18 ... 
    ..- attr(*, "dimnames")=List of 2 
    .. ..$ : NULL 
    .. ..$ : chr [1:2] "80%" "95%" 
    ..- attr(*, "tsp")= num [1:3] 2013 2048 1 
    ..- attr(*, "class")= chr [1:2] "mts" "ts" 
$ model :List of 4 
    ..$ mu : num 2 
    ..$ mu.se: num 0.577 
    ..$ sd : num 1 
    ..$ call : language meanf(x = object, h = h, level = level, fan = fan) 
$ lambda : NULL 
$ fitted : Time-Series [1:3] from 2010 to 2012: NA 1 1.5 
$ residuals: Time-Series [1:3] from 2010 to 2012: NA 1 1.5 
- attr(*, "class")= chr "forecast" 
+0

उनका कहना है कि बाहर के लिए धन्यवाद, लेकिन मैं पूरी तरह से समझ में नहीं आता । यदि मैं आर में "fcast" मान टाइप करता हूं तो यह पूर्वानुमान के परिणाम देता है। इन मानों को कहीं भी "fcast" के भीतर संग्रहीत किया जाना चाहिए। मैं उन्हें कैसे प्राप्त कर सकता हूं? यह संख्याओं को बस ठीक करता है ... – Chase

+0

fcast विभिन्न डेटा के साथ जटिल वस्तु है। आप इस ऑब्जेक्ट के क्षेत्र का उपयोग $ के साथ कर सकते हैं। उदाहरण के लिए: as.numeric (fcast $ level) संख्यात्मक वेक्टर है [80 9 5], as.numeric (fcast $ mean) संख्यात्मक वेक्टर प्रतिनिधि (2, 36) आदि है। आप इस डेटा का उपयोग C# से NumericVector nv जैसे लाइन के साथ कर सकते हैं = engine.GetSymbol ("fcast $ mean")। AsNumeric(); – AndreyAkinshin

+0

fcast $ mean एक शून्य मान देता है। यह आर के भीतर निर्दोष रूप से काम करता है जहां fcast $ मतलब केवल त्रुटि मार्जिन के बिना पूर्वानुमान देता है। मैं अभी भी जेनेरिक वेक्टर में कुछ डेटा खोदने की कोशिश कर रहा हूं। मुझे लगता है जैसे यह कहीं कहीं है मैं बस नहीं जानता कि कहां है। – Chase