Câu hỏi này là khoảng 5 tuổi và có một số câu trả lời có sẵn cho điều này như here. Tôi sẽ đi qua nó với một kịch bản rất đơn giản R
.
Nó là tốt để bắt đầu với điều này link
Trong ví dụ đơn giản này, tôi vượt qua 3 đến R, thêm nó với 5 và nhận được kết quả (8) trở lại.
bước
Tạo một file văn bản như name.r
, với mã r bạn, một cái gì đó như dưới đây. Tôi đặt tên nó như rcodeTest.r
library(RODBC) # you can write the results to a database by using this library
args = commandArgs(trailingOnly = TRUE) # allows R to get parameters
cat(as.numeric(args[1])+5)# converts 3 to a number (numeric)
Sau đó, tạo ra một lớp C# (gọi nó là bất cứ điều gì, tôi gọi nó là RScriptRunner
) như dưới đây, cũng có sẵn tại here. Đây là một lớp đơn giản mà chỉ gọi một thủ tục (một tập tin exe)
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for RScriptRunner
/// </summary>
public class RScriptRunner
{
public RScriptRunner()
{
//
// TODO: Add constructor logic here
//
}
// Runs an R script from a file using Rscript.exe.
///
/// Example:
///
/// RScriptRunner.RunFromCmd(curDirectory + @"\ImageClustering.r", "rscript.exe", curDirectory.Replace('\\','/'));
///
/// Getting args passed from C# using R:
///
/// args = commandArgs(trailingOnly = TRUE)
/// print(args[1]);
///
///
/// rCodeFilePath - File where your R code is located.
/// rScriptExecutablePath - Usually only requires "rscript.exe"
/// args - Multiple R args can be seperated by spaces.
/// Returns - a string with the R responses.
public static string RunFromCmd(string rCodeFilePath, string rScriptExecutablePath, string args)
{
string file = rCodeFilePath;
string result = string.Empty;
try
{
var info = new ProcessStartInfo();
info.FileName = rScriptExecutablePath;
info.WorkingDirectory = Path.GetDirectoryName(rScriptExecutablePath);
info.Arguments = rCodeFilePath + " " + args;
info.RedirectStandardInput = false;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
info.CreateNoWindow = true;
using (var proc = new Process())
{
proc.StartInfo = info;
proc.Start();
result = proc.StandardOutput.ReadToEnd();
}
return result;
}
catch (Exception ex)
{
throw new Exception("R Script failed: " + result, ex);
}
}
}
Sau đó gọi và vượt qua các thông số như
result = RScriptRunner.RunFromCmd(path + @"\rcodeTest.r", @"D:\Programms\R-3.3.3\bin\rscript.exe", "3");
rscript.exe
nằm trong thư mục R của bạn, và path
là vị trí của bạn r script (rcodeTest.r
)
Bây giờ bạn có thể có kết quả 8 = 5 + 3 làm đầu ra như hình dưới đây.
Nguồn
2017-05-22 21:45:15
Trả về dữ liệu Rscript của tôi với tiêu đề và 3 hàng. làm thế nào để đọc nó? –
Bạn có bất kỳ hạn chế nào khi sử dụng cơ sở dữ liệu không? Nếu không, hãy tạo một bảng và lưu trữ các giá trị trong bảng này (R), và chuyển tên bảng cho kịch bản của bạn (C#). hoặc chỉ sử dụng bảng và lược đồ được xác định trước. Bạn có thể cần phải sử dụng gói RODBC trong R cho việc này. –
Hiện tại tôi có quyền đọc, nhưng tôi phải yêu cầu quyền ghi. nhưng có cách nào để đọc đầu ra như là? mà không lưu nó trong DB? hoặc chuẩn bị toàn bộ bảng dưới dạng chuỗi và gửi dưới dạng chuỗi? Tôi bị lạc. Tôi cũng tạo ra một API còn lại với thợ sửa ống nước, nó trả lại cho tôi kết quả JSON dự kiến, nhưng nó là một luồng duy nhất, vì vậy chỉ có một tiến trình được phép tại một thời điểm. –