gpt4 book ai didi

c# - 我正在尝试使 RDotNet 与 C# 一起工作,但我遇到了问题

转载 作者:太空狗 更新时间:2023-10-29 18:31:50 28 4
gpt4 key购买 nike

我在 Visual Studio 2012 的 64 位 Windows 机器上,在 Web 环境中工作。

我已经使用 nuget 安装了最新版本的 R.net (1.5.5),最后发布于 16/09/2013,

我尝试设置路径(用户和系统)以包含目录“E:\Program Files\R\R-3.0.2\bin\x64”

我也根据一些建议尝试了这段代码......

// As per the example
var envPath = Environment.GetEnvironmentVariable("PATH");
const string rBinPath = @"E:\Program Files\R\R-3.0.2\bin\x64";
Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);

调用之前

// Create an instance of the engine
engine = REngine.CreateInstance("RDotNet");

Initialize();

但是我得到这个错误 DllNotFound.....

RDotNet.NativeLibrary.UnmanagedDll..ctor(String dllName) +267
RDotNet.REngine..ctor(String id, String dll) +55
RDotNet.REngine.CreateInstance(String id, String dll) +415

我研究过并发现其他人已经就如何解决此问题提出了建议 https://rdotnet.codeplex.com/discussions/353957我已经通读了这篇文章并尝试了各种方法,包括“已弃用”的 SetDllDirectory(dllDirectory As String) 并收到消息说它已被弃用,我不应该使用....

所以我有点难过 RDotNet 可以在 64 位上工作吗?我读到问题可能与引用另一个我没有的 Dll 的 RlaPack.dll 相关

我还读到关于 R_Home 的提示可能需要设置...但是其他人说它在 Windows 中工作,我不需要设置 R_home。

所以请社区提供一些我可以尝试的指导感谢任何在 c# 环境中具有 RDotNet/R 经验的人

最佳答案

这对我来说很好用。您应该在调用 R 引擎之前设置 R 路径。例如,您可以使用此功能设置它:

public static void SetupPath(string Rversion = "R-3.0.0" ){
var oldPath = System.Environment.GetEnvironmentVariable("PATH");
var rPath = System.Environment.Is64BitProcess ?
string.Format(@"C:\Program Files\R\{0}\bin\x64", Rversion) :
string.Format(@"C:\Program Files\R\{0}\bin\i386",Rversion);

if (!Directory.Exists(rPath))
throw new DirectoryNotFoundException(
string.Format(" R.dll not found in : {0}", rPath));
var newPath = string.Format("{0}{1}{2}", rPath,
System.IO.Path.PathSeparator, oldPath);
System.Environment.SetEnvironmentVariable("PATH", newPath);
}

然后你调用它例如:

        static void Main(string[] args)
{
SetupPath(); // current process, soon to be deprecated
using (REngine engine = REngine.CreateInstance("RDotNet"))
{
engine.Initialize(); // required since v1.5
CharacterVector charVec = engine.CreateCharacterVector(new[] {
"Hello, R world!, .NET speaking" });
engine.SetSymbol("greetings", charVec);
engine.Evaluate("str(greetings)"); // print out in the console
string[] a = engine.Evaluate("'Hi there .NET, from the R
engine'").AsCharacter().ToArray();
Console.WriteLine("R answered: '{0}'", a[0]);
Console.WriteLine("Press any key to exit the program");
Console.ReadKey();
}
}

编辑更好的方法:从注册表中读取路径:

 RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\R-core\R");
string rPath = (string)registryKey.GetValue("InstallPath");
string rVersion = (string)registryKey.GetValue("Current Version");
registryKey.Dispose();

关于c# - 我正在尝试使 RDotNet 与 C# 一起工作,但我遇到了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19725649/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com