R语言学习笔记(一)——在Vs、C#中配置R语言开发环境。
最近在学习小众的R语言,所以将遇到的问题记录下来供大家参考,不足之处欢迎大家交流指正。
至于R语言的介绍就不多说了,它集成了复杂的数学算法,将之封装成简单函数,开发者可以直接调用,使用得当绝对是一把利器。
配置前准备:
1.R语言安装包,因为是开源的所以大家可以直接去官网下载。
https://cran.r-project.org/src/base/R-3/
官网最新版是3.6.1,我这是使用的是3.4.1。
安装包P地址
链接:https://pan.baidu.com/s/16Z4gD9uhIdDoqttkrJ7KBw
提取码:xbj2
注意:R语言的安装包版本要与下面的引用类库版本兼容,不然就会出现
engine = REngine.GetInstance(); engine = null的情况。
我这里使用的3.4.1与类库版本亲测兼容,大家嫌麻烦可以直接使用我的。但是版本最高支持.netFrameWork 4.5。
2.R环境的引用类库。
直接网盘奉献:
链接:https://pan.baidu.com/s/1wYSLbXDs3CD6hFp5tcPKHg
提取码:w2lo
正式开始:
一.打开下载好的安装包,
注意:要用管理员权限打开。
然后一步一步下一步。
14
using
(engine = REngine.GetInstance(
null
,
true
,
null
,
null
))
15
{
16
engine.Initialize();
//
required since v1.5
17
CharacterVector charVec = engine.CreateCharacterVector(
new
[] {
"
Hello, R world!, .NET speaking
"
});
18
engine.SetSymbol(
"
greetings
"
, charVec);
19
engine.Evaluate(
"
str(greetings)
"
);
//
print out in the console
20
string
[] a = engine.Evaluate(
"
'Hi there .NET, from the R engine'
"
).AsCharacter().ToArray();
21
}
23
Console.ReadKey();
25
#endregion
27
#region
Test2
29
//
初始化R环境
30
//
engine = REngine.GetInstance(null, true, null, null);
32
///
/ .NET Framework array to R vector.
33
//
NumericVector group1 = engine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 });
34
//
engine.SetSymbol("group1", group1);
35
///
/ Direct parsing from R script.
36
//
NumericVector group2 = engine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)").AsNumeric();
38
///
/ Test difference of mean and get the P-value.
39
//
GenericVector testResult = engine.Evaluate("t.test(group1, group2)").AsList();
40
//
double p = testResult["p.value"].AsNumeric().First();
42
//
Console.WriteLine("Group1: [{0}]", string.Join(", ", group1));
43
//
Console.WriteLine("Group2: [{0}]", string.Join(", ", group2));
44
//
Console.WriteLine("P-value = {0:0.000}", p);
46
///
/ you should always dispose of the REngine properly.
47
///
/ After disposing of the engine, you cannot reinitialize nor reuse it
48
//
engine.Dispose();
49
//
Console.ReadKey();
51
#endregion
53
}
54
#endregion
56
#region
配置R环境
57
public
void
InitREngine()
58
{
59
var
oldPath = System.Environment.GetEnvironmentVariable(
"
PATH
"
);
///
//C:\Program Files\R\R-3.5.1\bin
60
var
rPath =
System.Environment.Is64BitProcess
61
?
@"
C:\Program Files\R\R-3.4.1\bin\x64
"
62
:
@"
C:\Program Files\R\R-3.4.1\bin\i386
"
;
63
if
(Directory.Exists(rPath) ==
false
)
64
{
65
throw
new
DirectoryNotFoundException(
66
string
.Format(
"
Could not found the specified path to the directory containing R.dll: {0}
"
, rPath));
67
}
69
var
newPath =
string
.Format(
"
{0}{1}{2}
"
, rPath, System.IO.Path.PathSeparator, oldPath);
70
System.Environment.SetEnvironmentVariable(
"
PATH
"
, newPath);
71
//
NOTE: you may need to set up R_HOME manually also on some machines
72
string
rHome =
""
;
73
var
platform =
Environment.OSVersion.Platform;
74
switch
(platform)
75
{
76
case
PlatformID.Win32NT:
77
break
;
//
R on Windows seems to have a way to deduce its R_HOME if its R.dll is in the PATH
78
case
PlatformID.MacOSX:
79
rHome =
"
/Library/Frameworks/R.framework/Resources
"
;
80
break
;
81
case
PlatformID.Unix:
82
rHome =
"
/usr/lib/R
"
;
83
break
;
84
default
:
85
throw
new
NotSupportedException(platform.ToString());
86
}
88
if
(!
string
.IsNullOrEmpty(rHome))
89
{
90
Environment.SetEnvironmentVariable(
"
R_HOME
"
, rHome);
91
}
92
}
93
#endregion
View Code
持续更博中...