728x90
반응형
728x170
▶ Program.cs
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using RDotNet;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 소스 값 배열 구하기 - GetSourceValueArray(count)
/// <summary>
/// 소스 값 배열 구하기
/// </summary>
/// <param name="count">카운트</param>
/// <returns>소스 값 배열</returns>
private static double[] GetSourceValueArray(int count)
{
double[] valueArray = new double[count];
Random random = new Random(DateTime.Now.Millisecond);
for(int i = 0; i < count; i++)
{
valueArray[i] = random.NextDouble() * 100;
}
return valueArray;
}
#endregion
#region R 실행 가능 경로 추가하기 - AddRExecutablePath()
/// <summary>
/// R 실행 가능 경로 추가하기
/// </summary>
private static void AddRExecutablePath()
{
string pathValue = Environment.GetEnvironmentVariable("Path");
string rExecutablePath = @"C:\Program Files\R\R-3.4.1\bin\x64;C:\Program Files\R\R-3.4.1\bin\i386";
Environment.SetEnvironmentVariable("Path", pathValue + Path.PathSeparator + rExecutablePath);
}
#endregion
#region 숫자 벡터 설정하기 - SetNumericVector(rEngine, variableName, sourceArray)
/// <summary>
/// 숫자 벡터 설정하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName">변수명</param>
/// <param name="sourceArray">소스 배열</param>
private static void SetNumericVector(REngine rEngine, string variableName, double[] sourceArray)
{
NumericVector numericVector = new NumericVector(rEngine, sourceArray);
rEngine.SetSymbol(variableName, numericVector);
}
#endregion
#region 숫자 벡터 설정하기 - SetNumericVector(rEngine, variableName, sourceEnumerable)
/// <summary>
/// 숫자 벡터 설정하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName">변수명</param>
/// <param name="sourceEnumerable">소스 열거형</param>
private static void SetNumericVector(REngine rEngine, string variableName, IEnumerable<double> sourceEnumerable)
{
NumericVector numericVector = new NumericVector(rEngine, sourceEnumerable);
rEngine.SetSymbol(variableName, numericVector);
}
#endregion
#region 평균 값 구하기 - GetAverageValue(rEngine, variableName)
/// <summary>
/// 평균 값 구하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName">변수명</param>
/// <returns>평균 값</returns>
private static double GetAverageValue(REngine rEngine, string variableName)
{
double averageValue = rEngine.Evaluate(string.Format("mean({0})", variableName)).AsNumeric().First();
return averageValue;
}
#endregion
#region 중간 값 구하기 - GetMedianValue(rEngine, variableName)
/// <summary>
/// 중간 값 구하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName">변수명</param>
/// <returns>중간 값</returns>
private static double GetMedianValue(REngine rEngine, string variableName)
{
double medianValue = rEngine.Evaluate(string.Format("median({0})", variableName)).AsNumeric().First();
return medianValue;
}
#endregion
#region 표준 편차 값 구하기 - GetStandardDeviationValue(rEngine, variableName)
/// <summary>
/// 표준 편차 값 구하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName">변수명</param>
/// <returns>표준 편차 값</returns>
private static double GetStandardDeviationValue(REngine rEngine, string variableName)
{
double medianValue = rEngine.Evaluate(string.Format("sd({0})", variableName)).AsNumeric().First();
return medianValue;
}
#endregion
#region 상관 계수 값 구하기 - GetCorrelationValue(rEngine, variableName1, variableName2)
/// <summary>
/// 상관 계수 값 구하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName1">변수명 1</param>
/// <param name="variableName2">변수명 2</param>
/// <returns>상관 계수 값</returns>
private static double GetCorrelationValue(REngine rEngine, string variableName1, string variableName2)
{
double correlationValue = rEngine.Evaluate(string.Format("cor({0}, {1})", variableName1, variableName2)).AsNumeric().First();
return correlationValue;
}
#endregion
#region ANOVA 값 구하기 - GetANOVAValue(rEngine, variableName1, variableName2)
/// <summary>
/// ANOVA 값 구하기
/// </summary>
/// <param name="rEngine">R 엔진</param>
/// <param name="variableName1">변수명 1</param>
/// <param name="variableName2">변수명 2</param>
/// <returns>상관 계수 값</returns>
private static double GetANOVAValue(REngine rEngine, string variableName1, string variableName2)
{
GenericVector genericVector = rEngine.Evaluate(string.Format("t.test({0}, {1})", variableName1, variableName2)).AsList();
double pValue = genericVector["p.value"].AsNumeric().First();
return pValue;
}
#endregion
#region 프로그램 실행하기 - Main()
/// <summary>
/// 프로그램 실행하기
/// </summary>
private static void Main()
{
AddRExecutablePath();
// 소스 값 배열을 설정한다.
double[] sourceValueArray1 = GetSourceValueArray(1000000);
double[] sourceValueArray2 = GetSourceValueArray(1000000);
using(REngine rEngine = REngine.CreateInstance("RDotNet"))
{
rEngine.Initialize();
SetNumericVector(rEngine, "value1", sourceValueArray1);
SetNumericVector(rEngine, "value2", sourceValueArray2);
// 평균 값을 계산한다.
double averageValue = GetAverageValue(rEngine, "value1");
Console.WriteLine("평균 값 : " + averageValue.ToString());
// 중간 값을 계산한다.
double medianValue = GetMedianValue(rEngine, "value1");
Console.WriteLine("중간 값 : " + medianValue.ToString());
// 표준 편차 값을 계산한다.
double standardDeviationValue = GetStandardDeviationValue(rEngine, "value1");
Console.WriteLine("표준 편차 : " + standardDeviationValue.ToString());
// 상관 계수 값을 계산한다.
double correlationValue = GetCorrelationValue(rEngine, "value1", "value2");
Console.WriteLine("상관 계수 : " + correlationValue.ToString());
// ANOVA 값을 계산한다.
double pValue = GetANOVAValue(rEngine, "value1", "value2");
Console.WriteLine("ANOVA : " + pValue.ToString());
}
}
#endregion
}
}
※ 상기 소스는 실행에 앞서 R 3.4.1 버전이 사전에 설치되어 있어야 한다. 버전이 상이하면 상기 AddRExecutablePath() 함수를 버전에 맞추어 수정한다.
728x90
반응형
그리드형(광고전용)
'C# > R.NET' 카테고리의 다른 글
[C#/R.NET] 평균, 중간, 표준 편차, 상관 계수, ANOVA 계산하기 (0) | 2017.07.22 |
---|---|
[C#/R.NET] T 테스트 통계 사용하기 (0) | 2016.05.10 |
[C#/R.NET] Hello, R world! 프로그램 실행하기 (0) | 2016.05.10 |
[C#/R.NET] R.NET NuGet 설치하기 (0) | 2016.05.10 |
[C#/R.NET] R.NET 소스 다운로드 하기 (0) | 2016.05.10 |
댓글을 달아 주세요