[英]How to execute a function of R from c#?
我正在嘗試使用C#(已安裝R.NET)執行用R編寫的簡單函數,如下所示
using Microsoft.Win32;
using RDotNet;
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\R-core\R"))
{
var envPath = Environment.GetEnvironmentVariable("PATH");
string rBinPath = (string)registryKey.GetValue("InstallPath");
string rVersion = (string)registryKey.GetValue("Current Version");
rBinPath = System.Environment.Is64BitProcess ? rBinPath + "\\bin\\x64" :
rBinPath + "\\bin\\i386";
Environment.SetEnvironmentVariable("PATH",
envPath + Path.PathSeparator + rBinPath);
}
using (REngine engine = REngine.CreateInstance("RDotNet"))
{
// Initializes settings.
engine.Initialize();
var myAddFunc = engine.Evaluate(@"addFunc <- function(a,b) {
a+b
}").AsFunction();
var sum = engine.Evaluate("@d <- myAddFunc(10,20))").AsNumeric();
engine.Evaluate("print(sum)");
Console.ReadKey();
}
}
}
}
但是在錯誤
var sum = engine.Evaluate(“ @ d <-myAddFunc(10,20))”)。AsNumeric();
RDotNet.dll中發生類型為'System.ArgumentNullException'的未處理異常。其他信息:值不能為null。
我在做什么錯?
在R-Console中運行程序工作正常
> addFunc <- function(a,b) {
+ a+b
+ }
> d<- addFunc(30,40)
> print(d)
[1] 70
錯字了嗎? @應該在字符串之外。 另外,不應用2個圓括號將其括起來。
"@d <- myAddFunc(10,20))"
應該
@"d <- myAddFunc(10,20)"
我知道我為此遲到了兩年多,您解決了嗎? 無論如何,嘗試一下
using (REngine engine = REngine.CreateInstance("RDotNet"))
{
// Initializes settings.
engine.Initialize();
var myAddFunc = engine.Evaluate(@"addFunc <- function(a,b) {
a+b
}").AsFunction();
var sum = engine.Evaluate(@"addFunc(12,30)").AsNumeric();
engine.Evaluate("print(sum)");
Console.Write(sum[0].ToString());
Console.ReadKey();
}
您需要在第二個Evaluate語句中使用addFunc而不是myAddFunc(即
var sum = engine.Evaluate(@"addFunc(12,30)").AsNumeric();
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.