// 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); }
protected override void Execute(CodeActivityContext context) { try { SymbolicExpression input = this.Input.Get(context); this.Output.Set(context, input.AsDataFrame()); } catch (Exception e) { throw e; } }
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"); } }