カテゴリ:R( 3 )
R.NETとExcel-DNAで32bitのExcelからRを使う
目的
Excel2010の32bitと最新のR.NETで以下のことをやる
R.NETとExcel-DNAでRで動くExcelアドインを作る


動作環境
Windows7 64bit
Office2010 32bit
ExcelDNA 0.30   ※要.NET Framework2.0~4.0のいづれか
R.NET 1.5.5         ※要.NET Framework4.0

実行手順
1.R.NETを展開したら次のDLLを32ビットで動くようにする
(32ビットOSでは不要なはず)
  • RDotNet.NativeLibrary.dll
  • RDotNet.dll

コンパイル後のDLLを32ビットで動作させるには次の記事を参考にする。
64bitOSでAnyCPUでコンパイルした32bitプロセスを動かす

2013/11/30 訂正:RDotNet.dll とRDotNet.NativeLibray.dllはCPU Anyでビルドされているので上記の作業は不要


2. 1のDLLと同じパスにExcelDNAのDistributionに入っているExcelDna.xllをコピーして「RNET.xll」と名称を変更する。

3.RNet.dnaとして次のファイルを作成する。
 BOMなしのUTF8で保存しておく。

<DnaLibrary RuntimeVersion="v4.0" Name="R.NET" Description="R.NETをExcelから動作させる試験" Language="CS">
<Reference Path="RDotNet.NativeLibrary.dll"  />
<Reference Path="RDotNet.dll"  />
<![CDATA[
using System;
using System.IO;
using System.Linq;
using RDotNet;

namespace CSLib
{
    public class CSLib
    {
        static REngine engine = null;
        static CSLib()
        {
            var envPath = Environment.GetEnvironmentVariable("PATH");
            var rBinPath = @"C:\Program Files\R\R-3.0.2\bin\i386";
            Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);
            engine = REngine.CreateInstance("RDotNet");
            engine.Initialize();
        }
       
        public static double[] MyRnorm(int number)
        {
            return (engine.Evaluate("rnorm(" + number + ")").AsNumeric().ToArray<double>());
        }

    }
}
]]>

</DnaLibrary>
4.あとは「R.NETとExcel-DNAでRで動くExcelアドインを作る」と同じ

[PR]
by mima_ita | 2013-11-30 20:49 | R
twitteRを久しぶりに使用したら文字化けしていた件
R言語でtwitteRを使用している場合、以下の条件で文字化けします。
  • Windowsを使用している場合。
  • twitteRのバージョンが1.1.7 (2013/7/8)以降のリリースの場合

そしてこの文字化けしたデータはiconvで修復できない

原因
以下のバグを修正したのが原因
Problems with non UTF-8 and ASCII characters twitteR package in R

comm.R
twFromJSON = function(json) {
  #twitter sends data in UTF-8, paranoidly confirm encoding
  json = iconv(json, "", "UTF-8", sub="")

これは取得したJSONデータでUTF-8に変換できない文字を削除しています。
Windows(日本語)の場合、cp932からutf8に変更してしまうのです。
そして、subを指定して変更できない文字は全部消してしまうので、もとに戻すことはできません。

対策
1. 1.1.6に戻す。以下からダウンロード
 http://cran.r-project.org/src/contrib/Archive/twitteR/
 
2. 1.1.7のソースでさっきのiconvをコメントアウトする

なお、以下のページから開発中のコードを取得できるが、大きく修正をいれようとしていて、不安定そうなので今の時点では、やめたほうがいい。
https://github.com/geoffjentry/twitteR


パッケージのビルド
いづれの対策の場合でも、ソースコードをビルドしてインストールするひつようがある。
rcmd INSTALL --build -l ライブラリをおいているのパス パッケージのパス

このコマンドはコマンドプロンプトから実行する必要がある。rcmdは"C:\Program Files\R\R-3.1.2\bin\x64\Rcmd.exe"に存在する
※32bitの場合はC:\Program Files\R\R-3.1.2\bin\i386

2014/12/17 以下の方法で最新をいれても文字化けは解消されます。

http://qiita.com/mima_ita/items/192df262a89af1f6932c


[PR]
by mima_ita | 2013-11-29 20:25 | R
R言語でTwitterを操作する
■目的
R言語のパッケージtwitterRを使用する
マニュアルどおり遣ってもうまくいかなかったので、なんとかしてみた

■手順
#任意の箇所にtwitteRパッケージをダウンロードする
install.packages("twitteR","c:\\dev\\R")

#ダウンロードした箇所をライブラリのパスに追加する
.libPaths("c:\\dev\\r")

#ライブラリを読み込む
library(twitteR)

#任意のフォルダをカレントディレクトリとする。これは認証用のファイルの入出力で使用する
setwd("C:\\doc\\r")

# SSLの認証をするためのpemファイルをダウンロードしておく
# これがないとHTTPSのプロトコル経由で操作できないYO!
download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")

#OAuthの認証開始
# consumerKeyとconsumerSecretは下記のURLから取得しておく
# https://dev.twitter.com/
cred<-OAuthFactory$new(consumerKey="Twitterで登録したコンシューマキー",
consumerSecret="Twitterでとうろくした値",
requestURL ="https://api.twitter.com/oauth/request_token",
accessURL = "https://api.twitter.com/oauth/access_token",
authURL="https://api.twitter.com/oauth/authorize")

#接続開始
cred$handshake(cainfo="cacert.pem")

この際、下記のような画面になる
b0232065_817518.png


現在、oauth_verifierの値の入力待ちの状態なので、ここに表示されているURLをブラウザで表示する。
すると、次のような画面になる
b0232065_8192138.png


アプリケーションの連携を許可するとリダイレクトされる。
b0232065_8201487.png

ブラウザのURLのoauth_verifier以降の値を入力待ちされているRに入力すると認証が完了する。

# 認証情報をTwitterに登録
registerTwitterOAuth(cred)

#タイムラインを取得。この際、PEMファイルを指定しないとHTTPSでは通信できない
userTimeline("mima_ita",cainfo="cacert.pem")

b0232065_82385.png


やったね、Rちゃん!ツイートがみれたよ!


More
[PR]
by mima_ita | 2013-06-13 08:24 | R



実験ですお
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ