Выполнение .R скрипта с RGL Plott из c # Gui через класс RScripRunner - PullRequest
0 голосов
/ 30 октября 2018

У меня есть PointCloud с XYZ-данными и я хочу построить его с помощью скрипта .r из моего C # GUI. Поэтому я использую библиотеку "rgl" в R. Код R работает нормально. Я пытаюсь использовать этот класс:

/// <summary>
/// This class runs R code from a file using the console.
/// </summary>
public class RScriptRunner
{
    /// <summary>
    /// 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]);
    /// </summary>
    /// <param name="rCodeFilePath">File where your R code is located.</param>
    /// <param name="rScriptExecutablePath">Usually only requires "rscript.exe"</param>
    /// <param name="args">Multiple R args can be seperated by spaces.</param>
    /// <returns>Returns a string with the R responses.</returns>
    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();
                    proc.Close();
                }

                return result;
            }
            catch (Exception ex)
            {
                throw new Exception("R Script failed: " + result, ex);
            }
    }
}

Я скопировал его из https://stackoverflow.com/questions/18224439/run-r-script-with-start-process-in-net/53054499#53054499

Проблема в том, что когда я запускаю файл .r через RScriptRunner-Class сверху, rgl-plot появляется и сразу выключается. Так что я могу сделать, чтобы окно графика оставалось открытым? Вот мой .R код:

daten <- read.csv("file:///C:\\Users\\Quirin\\Dropbox\\KwiJuLa\\Testmessung Debugging 25.10\\test.csv")

library(rgl)

datenMatrix <- as.matrix(daten)
x1 <- datenMatrix[, 3]
y1 <- datenMatrix[, 4]
z1 <- datenMatrix[, 5]


rgl1 <- plot3d(x1, y1, z1)

С наилучшими пожеланиями

...