// STATUS [ July 9, 2019 ] : this works
        /// <summary>
        ///     Get list of Mlb player's Player Id, First Name, Last Name
        /// </summary>
        /// <param name="lastName">todo: describe lastName parameter on GetPlayerInfoForAllPlayersWithLastName</param>
        /// <remarks>
        ///     See: 'playerInfo' section @ http://lahman.r-forge.r-project.org/doc/
        ///     See: https://analyticsrusers.blog/2018/05/31/leverage-r-code-within-net-environments-running-a-cvar-model-in-a-c-applications/
        /// </remarks>
        /// <example>
        ///     var playerInfoList = GetPlayerInfoForAllPlayersWithLastName("rizzo");
        /// </example>
        /// <returns>
        ///     List of LahmanPlayerInfo that includes: Lahman Id, First Name, Last Name
        /// </returns>
        public List <LahmanPlayerInfo> GetPlayerInfoForAllPlayersWithLastName(string lastName)
        {
            _h.StartMethod();

            var engine = _r.CreateNewREngine();

            engine.Evaluate("library(Lahman)");

            CharacterVector lastNameVector = _r.CreateCharVect(engine, lastName);

            engine.SetSymbol("lastNameVector", lastNameVector);
            lastNameVector.Dispose();

            SymbolicExpression lastEval  = engine.Evaluate("playerInfo(lastNameVector)");
            DataFrame          dataFrame = lastEval.AsDataFrame();

            var rowCount = dataFrame.RowCount;
            List <LahmanPlayerInfo> playerinfoList = new List <LahmanPlayerInfo>();

            for (var indexer = 0; indexer <= rowCount - 1; indexer++)
            {
                var playerInfo = CreateLahmanPlayerInfoInstance(dataFrame, indexer, lastName);
                playerinfoList.Add(playerInfo);
            }
            _h.Dig(playerinfoList);
            // engine.Evaluate("playerInfo(lastNameVector)");
            return(playerinfoList);
        }
Exemplo n.º 2
0
 protected override void Execute(CodeActivityContext context)
 {
     try
     {
         SymbolicExpression input = this.Input.Get(context);
         this.Output.Set(context, input.AsDataFrame());
     }
     catch (Exception e)
     {
         throw e;
     }
 }
Exemplo n.º 3
0
        public static void RunRScript(SqlString script)
        {
            lock (_lock)
            {
                // initialize R engine
                if (_engine == null)
                {
                    SqlContext.Pipe.Send("Starting R engine");
                    REngine.SetEnvironmentVariables();
                    _console = new SqlConsole();
                    _engine  = REngine.GetInstance(null, true, null, _console);
                    SqlContext.Pipe.Send("R engine has been started");
                }

                // Execute R script
                SqlContext.Pipe.Send("Starting R script execution");
                SymbolicExpression res = _engine.Evaluate(script.ToString());

                // Parse and return results if any
                if (res != null && res.IsDataFrame())
                {
                    DataFrame df = res.AsDataFrame();

                    SqlMetaData[] cols = new SqlMetaData[df.ColumnCount];
                    for (int i = 0; i < df.ColumnCount; i++)
                    {
                        cols[i] = new SqlMetaData(df.ColumnNames[i], SqlDbType.Variant);
                    }

                    SqlDataRecord rec = new SqlDataRecord(cols);

                    SqlContext.Pipe.SendResultsStart(rec);

                    var rows = df.GetRows();

                    foreach (DataFrameRow row in rows)
                    {
                        for (int i = 0; i < df.ColumnCount; i++)
                        {
                            rec.SetValue(i, row[i]);
                        }
                        SqlContext.Pipe.SendResultsRow(rec);
                    }

                    SqlContext.Pipe.SendResultsEnd();
                }

                SqlContext.Pipe.Send("R script execution completed");
            }
        }