fc2ブログ

R.NETを使う(1)

 今年最後のブログです。あと数時間で年が明けますが、忙しい1年でした。ブログのアップ件数が昨年に比べ減少してしまったのも、そのせいかもしれません。

 さて、データ解析でRを使うことがあり、システムとしてRをどのように組み込んで行ったら良いのかを考えていました。個人的にはR Studioを普段使って様々な解析を行っていますが、ユーザに使ってもらうにはどのように実装すればいいのでしょうか?
 ネット上で調べていると、R.NETという.NET系のパッケージを見つけました。手っ取り早い感じがしましたので、味見をしてみました。他にはDLLの関数を動的に読む方法があるようですが、これは後日調べてみようと思います。
 OpenCVで.NET系(C#)でコーディングしたい時はOpenCvSharpを使っていた時もありましたが、関数の使い方が微妙に異なっていたので、最終的にC++/CLIでフォームアプリに走ったこともありました。今回は、どちらに転ぶやら・・。

 手順は、このサイトを全面的に参考にしました。ありがとうございました。
 C#のフォームアプリの新規プロジェクトを作成し、ソリューションエクスプローラでプロジェクトを選択し、右クリックして「NuGetパッケージの管理」を選択します。RDotNET1_171231.pngNuGetパッケージマネージャーが立ち上がりますので、参照を選択し、「Rdotnet」で検索し、RDotNet.FSharpを選択します。RDotNET2_171231.pngインストールボタンを押すと、RDotNET3_171231.pngプロジェクトの参照に組み込まれます。RDotNET4_171231.png
 プログラムは、y=x2 (x=1,2,3,...,10)をプロットしたもので、Graphボタンを押すと、Rでグラフ描画し、pngファイル保存して、pictureBoxに表示させるものです。

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;
using RDotNet;

namespace R_Interface
{
public partial class Form1 : Form
{
private string imgPath = @"c:\\temp\\RDotnet.png";
private REngine re;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
REngine.SetEnvironmentVariables();
re = REngine.GetInstance();
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
re.Dispose();
}

private void DrawPicture()
{
using (System.IO.StreamReader str = new System.IO.StreamReader(imgPath))
{
this.pictureBox1.Image = new Bitmap(str.BaseStream);
str.Close();
}
this.pictureBox1.Invalidate();
}

private void Graph_btn_Click(object sender, EventArgs e)
{
var x = re.Evaluate("x <- 1:10").AsNumeric();
var y = re.Evaluate("y <- x*x").AsNumeric();
re.Evaluate(String.Format("png('{0}', width={1}, height={2}, bg='transparent');", imgPath, pictureBox1.Width, pictureBox1.Height));
re.Evaluate("plot(x, y, type='b')");
re.Evaluate("graphics.off();");
DrawPicture();
}
}
}
RDotNET5_171231.png 結果もいい感じです。実使用上で問題ないか、さらに調べていこうと思います。
スポンサーサイト



Visual Studio for Macを味見する(2)

 前回の続きです。Visual Studio for Macを起動させ、「新しいプロジェクト」を作成します。VSMac1_171230.png今回は.NET Coreのコンソールアプリを作成しますので、以下の通り選択しました。VSMac2_171230.pngプロジェクト名は、定番のHelloWorldにしました。VSMac3_171230.pngエディタが立ち上がりましたが、すでにサンプルのプログラムが記載されていました。まさにこの定番のC#のコードです。実行すると、Macのターミナルが起動し、実行されました。VSMac4_171230.png Releaseモードで作成されたプログラムは、
 /Users/ユーザ名/Projects/HelloWorld/HelloWorld/bin/Release/netcoreapp2.0
のフォルダ内のHelloWorld.dllです。ターミナルからの実行は、dotnetコマンドでプログラム名を指定します。dotnetというコマンドもそうですが、ファイルとしてexeではなく、dllをしている点も何か変な感じです。問題なく実行はできているようですが・・・。MacRunFromTerminal_171230.pngmacOSで実行できたので、次はWindows10で実行したいと思います。プログラムフォルダごとWindows PCにコピーしました。WinRunFromTerminal_171230.pngコマンドラインから実行すると、.NET Coreが最新バージョンでないと怒られてしまったので、Visual Studio 2017を最新版にしました。更新後、同じdotnetコマンドで実行すると同じ結果が出力できました。なるほど、Macで開発したプログラムがそのまま使えるんですね。便利ですね・・。

 次に、ubuntu環境で実行です。以前、MacBookAirに接続した外付けSSDにubuntuをインストールしましたので、それで確認です。環境はMicrosoftに情報があったので参考にしました。これもMacで作成したプログラムをフォルダごとコピーして実行しました。これも正常に実行できました。UbuntuRunFromTerminal_171230.png 最後にRaspberry Pi(Debian 9.1)からの確認です。環境はネット情報を元に構築しました。操作は、MacBookAirからSSH接続して実行しました。これも問題なしです。RaspiRunFromTerminal_171230.png
 コンソールアプリですが、.NET Coreの環境があれば、いろいろなプラットフォームでビルドし直さなくてもC#のコードが動くことは便利ですね。勉強になりました。

Visual Studio for Macを味見する(1)

 12月は怒涛のように忙しかったです・・。ようやく正月休みです。例年なら正月には実家(九州)に帰省するのですが、今年は暦の上で休みが少ないので、実家に帰らずに家でのんびり過ごします。
 忙しさのあまり、しばらくブログに記事をアップできていませんでした。また、1ヶ月間ブログ更新なしで、スポンサーサイトが顔を出してしまいました。

 いつもの前置きはこれぐらいにして・・、ネットでふと「Visual Studio for Mac」なるものを見つけました。2016年11月に発表されたようですが、全然知りませんでした。MacにXamarin Studioを入れてC#でプログラムを組んで遊んだことがありましたが、VS for Macがどんなものか、味見をしてみました。

 セットアップは、このサイトからダウンロードしてスタートです。1_Install_171230.pngVisualStudioforMacInstaller.dmgがダウンロードされますので、2_Install_171230.pngそれを開く(実行する)と、3_Install_171230.pngインストールがスタートします。4_Install_171230.png流れに従って進みます。5_Install_171230.pngAndroid、iOS、macOS、.NET Coreのプラットフォームに対応しているようです。6_Install_171230.png7_Install_171230.pngインストールの途中で、2回、パスワードを聞いてくるのでその都度入力しました。8_Install_171230.png待つことしばらく、無事にインストールは完了しました。9_Install_171230.png
 次回は.NET Coreで定番のコンソールアプリをVS for Macで作成し、Windows、macOS、ubuntu、Raspberry Pi(debian)などの環境下で動かしてみようと思います。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: