R語言學習筆記——C#中如何使用R語言setwd()函式
阿新 • • 發佈:2019-07-31
在R語言編譯器中,設定當前工作資料夾可以用setwd()函式。
> setwd("e://桌面//")
> setwd("e:\桌面\")
> setwd("e:/桌面/")
這三種結構都是可以編譯通過的,
但是在VS C#中卻不行,只有一種能執行成功。
(PS:R語言在VS中執行要先配置環境,還沒配置的童鞋先要配置好,才可執行,如有問題可看我前面的隨筆。)
就是這種結構,engine.Evaluate("setwd('e:/桌面/')");
我除錯了很多次,確實只有這樣寫才能設定它的工作資料夾,但是必須保證資料夾存在。
下面貼上完整程式碼,我是在winform中除錯的,然後用PictuerBox顯示圖片。
//配置R語言環境 private void LoadRPath(string RVersion = "R-3.4.1")//預設R-3.4.1 { string dlldir = @"C:\Program Files\R\" + RVersion + @"\bin\x64";//預設64位 bool r_located = false; var rPath = System.Environment.Is64BitProcess ? string.Format(@"C:\Program Files\R\" + RVersion + @"\bin\x64") : string.Format(@"C:\Program Files\R\" + RVersion + @"\bin\i386"); dlldir = rPath; while (r_located == false) { try { REngine.SetEnvironmentVariables(dlldir); r_located = true; } catch { if (System.Environment.Is64BitProcess) { MessageBox.Show(@"找不到R執行環境:\R\" + RVersion + @"\bin\x64 " + " \n請手動新增資料夾目錄"); } else { MessageBox.Show(@"找不到R執行環境:\R\" + RVersion + @"\bin\i386" + " \n請手動新增資料夾目錄"); } FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog(); if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { dlldir = @folderBrowserDialog1.SelectedPath; } } } } private void CalculateHist() { //避免產生相同名稱檔案 string rnd = System.Guid.NewGuid().ToString().Replace("-", ""); string fileName = "i" + rnd + "_Hist.png"; //拿到程式執行目錄 string sysPath = Application.StartupPath; string dir = sysPath + "\\RImage\\Hist\\"; string fullDir = dir + fileName; //建立資料夾 Directory.CreateDirectory(Path.GetDirectoryName(dir)); //替換 dir = dir.Replace("\\", "/"); //設定工作資料夾 engine.Evaluate("setwd('" + dir + "')"); engine.Evaluate(string.Format("png(file='{0}',bg ='transparent',width={1},height={2})", fileName, this.ptbHist.Width, this.ptbHist.Height)); // string Rcode = @"library('scatterplot3d') // z <- seq(-10, 10, 0.01) // x <- cos(z) // y <- sin(z) // scatterplot3d(x, y, z, highlight.3d=TRUE, col.axis='blue', col.grid='lightblue',main='3d繪圖',pch=20) // "; engine.Evaluate(@"x <- (0:12) * pi / 12 y <- cos(x) plot(x,y); "); //engine.Evaluate(Rcode); engine.Evaluate("dev.off()"); //var x = engine.Evaluate("x <- rnorm(100, mean=50, sd=10)").AsNumeric(); //engine.Evaluate("hist(x)"); //var x = engine.Evaluate("x <- 1:100").AsNumeric(); //var y = engine.Evaluate("y <- 5:105").AsNumeric(); //engine.Evaluate("model = function (a, b){23.86+5.525*b-2.5725*a-6.6413*b^2-5.1862*a^2}"); //evaluate function //engine.Evaluate("z = outer(x, y ,model)"); //engine.Evaluate("contour(x,y,z, nlevels = 10)"); //string path = System.IO.Path.GetFullPath(fileName); Bitmap image = new Bitmap(fullDir); ptbHist.Image = image; }
歡迎大家交流學習~~~~~~~~
&n