우리 모두 알고 있듯이 R 소프트웨어는 매우 강력하며 다양한 통계 및 출력 그래픽을 수행할 수 있습니다. 다음은 R 언어와 C# 간의 통신 방법과 R그리기 결과를 WinForm UI 인터페이스에 표시하는 방법을 소개합니다. 기사 매우 자세해서 도움이 필요한 친구들이 참고할 수 있습니다.
1. 전제조건
R 소프트웨어를 설치하려면 32비트 R 소프트웨어를 설치해야 하며, 다음과 같은 경우 오류가 발생합니다. 64비트를 호출합니다. 또 하나는 컴퓨터 환경변수에 R을 추가하는 것입니다.
R 소프트웨어를 열고 이 R 패키지는 데모에 필요합니다.
2. 프로젝트 생성 GraphGenerateByR 프로젝트 구조는
참고: 여기서 RDotNet클래스 라이브러리를 소개해야 합니다. http://rdotnet.codeplex.com/
3. 기본 폼 코드
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace GraphGenerateByR { using RDotNet; public partial class Main : Form { public Main() { InitializeComponent(); } REngine engine = null; string Rcode = ""; private void btnPlot_Click(object sender, EventArgs e) { try { if(this.txtRcode.Text=="") { 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) "; } else { Rcode = this.txtRcode.Text; } //R.3.2.4 engine = REngine.GetInstance(); engine.Initialize(); //图片加入GUID,防止重名(还有一种就是先删除后保存) string rnd = System.Guid.NewGuid().ToString().Replace("-", ""); string filename ="i"+ rnd+ "Rimage.png"; engine.Evaluate(string.Format("png(file='{0}',bg ='transparent',width={1},height={2})", filename, this.ptbGraphic.Width, this.ptbGraphic.Height)); //engine.Evaluate(@"x <- (0:12) * pi / 12 // y <- cos(x) // plot(x,y); // "); engine.Evaluate(Rcode); engine.Evaluate("dev.off()"); string path = System.IO.Path.GetFullPath(filename); Bitmap image = new Bitmap(path); ptbGraphic.Image = image; } catch(Exception ex) { MessageBox.Show(ex.Message); } } private void Main_FormClosing(object sender, FormClosingEventArgs e) { if(engine!=null) { //clean up engine.Dispose(); } } } }
실행:
plot을 클릭한 후 기본 R 코드를 호출하면 구조는 다음과 같습니다.
적절한 R 도면 문을 입력하고 Plot을 다시 클릭하면 결과는 다음과 같습니다.
요약
위 내용은 그리기 및 표시를 위해 R을 호출하는 Windows Form을 구현하기 위해 C#을 사용하는 방법에 대한 자세한 소개(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!