Rcpp

Rcppを使ってパッケージを作る

Rcppパッケージには、Rcppを介してcppを使ったパッケージの見本を作成する関数 Rcpp.package.skeleton() がある Rstudioで新たにcppファイルを作成して、然るべきフォルダに保存して Rcppパッケージの compileAttributes() 関数を実行して、出来上がり あと…

Armadillo,RcppArmadilloにみるC++ライブラリのR化

Armadilloの中身をみるためにはここからダウンロード RcppArmadilloの中身を見るためにはこのgithubへアクセス まずは、Armadilloが何かを確認しよう C++で素敵に線形代数をやるためのライブラリで、LAPAKとかに依存している(依存せずに使ってもよいらしいけ…

Rcpp; No helps; github & R package

この記事の「なんちゃってRパッケージ」はこちら Here is the github containing files and directories handled in this note. Rcppのよさは、Rcppファイルを作ると、Cpp関数をRから呼び出す関数(ラッパー関数)を書く必要がないこと Rxpp is a package to u…

C++写経用メモ

少しC++がわかってきたので、写経をしてもよい頃かも知れない こちらに数値計算系のサイトがあって、おもしろそう Advanced RのRcppのセクションも助走によい→Rcppの準備の確認はこちらで

C++ -> Rcpp 写経その3『配列で大量のデータ処理』

http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CBEG/cbeg4.html:『配列で大量のデータ処理』 その6 intからdoubleへ変換 // sample06.cpp #include <stdio.h> main(void) { int score1, score2; double mean; printf("Input the score of No.1 = "); scanf("</stdio.h>…

C++ -> Rcpp 写経その2『ループで繰り返し計算』

『ループで繰り返し計算』 その4 ループで加算 // sample04.cpp #include <stdio.h> main(void) { int n; // 変数の宣言 int sum = 0; // 変数の宣言と初期化 // for ループ for( n=1 ; n<=10 ; n++ ){ sum += n; // 足し上げる } printf("The sum is %d\n", sum ); </stdio.h>…

C++ -> Rcpp 写経その1『簡単な計算』

『簡単な計算』 その1 文字列を表示・文字列を返す // sample01.cpp #include <stdio.h> main(void) { printf("Computer in Physics\n"); } // sample01R.cpp #include <stdio.h> #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] CharacterVector sample01() { //printf</rcpp.h></stdio.h></stdio.h>…

C++が使えてRcppパッケージがワークすることの確認

資料 C++が使えてRcppパッケージがワークすることの確認 library(Rcpp) cppFunction('int add(int x, int y, int z) { int sum = x + y + z; return sum; }') add add(3,4,5) c++コードになっている'int...'がコンパイルされて、pointer: 0x0000000005d81770…

Armadillo with or without R

準備:g++が使えるようにしておく Have g++ ready. Windowsなら、Rtoolsを使ってR経由で使えるようにすればよい You can use Rtools for windows to get g++ ready. さて。Rとは別にArmadilloを使った1枚のソースコードファイルがあるとする You have one f…

メモ

Windowsの話 RtoolsはRのコマンドライン実行をしたり、コンパイルを可能にしたりするための一式を入れるツール。Cygwinとかと似たような意味合いもある コンパイラg++は、Rtoolsで入れたり、cygwinで入れたり、python(x,y)でコンパイラごと入れたりするとバ…

Rcpp sugarで統計分布の関数を使う

Rcppのsugarというのは、Rcppパッケージで提供される、cppコードとして使う関数なんだけれども、その名称がうまいことR本体の関数と同じように作ってあって、Rの関数を思い出しながらcppを書けるようにしてくれている一群の「Rユーザを甘やかす関数」のこと …

Rcppまとめ

2015年の年始にRcppについて調べ物をした。記事が散在したので整理しておく 大きく2系統 (1)Rを使えることを前提にベクトル・行列処理をRcpp化するための実践記録 (2)RでCppを使うにあたってCppってどういう構成になっていて、どうやって「あったらいいな」…

Armadillo

ArmadilloはC++の線形代数ライブラリなのだけれど、Rで使うときにはRcppArmadilloパッケージを介して使う手がある(C++のArmadilloをC++を書くときに使ってもよいのだろうけれど、それより「R Armadillo連携に特化しているということだろう Rcpp自体の代りにR…

STL

STLとは 色々あるけれど、いくつかの大事な塊がある (1)Iterator (繰り返し処理のための仕組み) (2)アルゴリズム (3)データ構造 (1) Iterator 地道にベクトルの要素アドレスを指定して回すこともできるが… double sumC(NumericVector x) { int n = x.size();…

Rcpp sugar

Rcpp sugar これは、C++なんだけど、Rと同じように書けるようにしてある関数についてのこと たとえば、Rではベクトル化計算ができるし、そうするのが速いのだが、C++ではループを回すのが普通。ただし、ベクトル化演算が基本演算でできるようにC++でsugar登…

Rcpp、一歩前へ

Rcppの基礎は前掲記事で終わり。ただループ処理を速くしたいだけなら、それだけでもたぶんOK C++でR的に書きたい→sugar 、データ構造やアルゴリズムで便利なライブラリを使いたい→STL (その先にboost)、RcppArmadilloなどがある C++、コンパイラに負荷がか…

Rcppおさらい

Rcppを使ってみた(こちら) おおまかに分かったので、じゃあ、Rcpp/Cppの強みについておさらいしておこう 一番の基本(この記事) 少し先(sugar,STL,Armadillo) こちらを読む Rcppをいつ使う? Rのコードでできるだけのことをしても「遅い」とき それはいつ? …

Rcppで格子遊び2

完全2部グラフから、条件を満たす辺のリストを作る 2部グラフの一塊はx+y+z+w=n-1のベクトルの集まり、もう一塊がx+y+z+w=nのベクトルの集まり それぞれ、相当のベクトル数ではあるけれど、全ペアの距離を調べてリストアップする ただし、出来上がるエッジ…

Rcppで格子遊び1

頂点数を数える 頂点数はただの漸化式。C++化する必要もないだろう。してもよいけど… n <- 500 a <- rep(0,n) a[1] <- 1 for(i in 2:n){ a[i] <- (i+2)*a[i-1]/(i-1) } a Rcppを使ってみる コメント行は"//"で始まる RcppArmadilloを使うので"//Rcpp::depend…

Rcppで格子遊び0

こちらでRcppを覚えてみようか、そのための地ならし情報収集をしてみよう、という記事を書いた。 その実践編。『自分のためにRcppを使ってみる 〜RstudioでC++を覚える』 課題を以下のように設定する。 d=4次元立方格子の非負整数格子を考える 格子はハミン…

RcppしながらSweave

C++とRとのコードの書式を描き分けながら…→参考 このpdf \documentclass{jsbook} \usepackage{amsmath,amssymb} \usepackage{bm} %\usepackage{graphicx} \usepackage{ascmac} \usepackage[dvips]{graphicx} \usepackage{graphicx} \usepackage{bigdelim,mul…

Rとのデータのやりとりをさらに復習する

#include <RcppArmadilloExtensions/sample.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp ; // [[Rcpp::export]] int int_int(int n,int d) { int ret = n+d; return ret; } // [[Rcpp::export]] double int_double(int n,int d) { double nd = n*1.0; double dd = d*1.0; dou</rcpparmadilloextensions/sample.h>…

返り値をリストで統一してみる

Rの関数の返り値はリストとするのが基本になっているので、Rcppを使うときもそう決めてしまうのも手かもしれません。以下のように… // [[Rcpp::export]] List hogeReturningList(****) { **** return List::create( Named("hogeInt") = x, Named("hogeNumeri…

Rcpp.package.skeleton()を使って、まとめておく

ここにも書いたようにRcpp.package.skeleton()のlist argumentはpackage.skeletonのそれとは違って、挙動が不明なのでひとまず使わない方針とする 次の3ファイル(2ファイルがc++,1ファイルがRのコードとする) c++のヘッダファイルも作った方がよいような…

Rcpp Attributesを読む

library(Rcpp) vignette("Rcpp-attributes") とすることで"Rcpp Attributes.pdf"という文書が読める Rcppはいくつかの解説文書を持つが、この"Rcpp Attributes.pdf"は比較的新しい方の文書で、sourceCpp()関数によるseamless between c++ and Rの機能の追加…

基礎的な算術計算など

#include <RcppArmadilloExtensions/sample.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp ; // [[Rcpp::export]] NumericVector factorial_num(int n) { NumericVector x(n); x[0] = 1; for(int i=1;i</rcpparmadilloextensions/sample.h>

math.h関連

math.h #include <RcppArmadilloExtensions/sample.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp ; // [[Rcpp::export]] NumericVector arith(double a, double b) { NumericVector x(28); x[0] = a+b; x[1] = a-b; x[2] = a*b; x[3] = a/b; x[4] = fmax(a,b); x[5] = round(a</rcpparmadilloextensions/sample.h>…

Rcpp.h,RcppArmadillo.hなど基礎

""はここにあるように、RcppArmadilloでRの乱択ができるように書かれたhファイルだが、その中で#include しているので、RcppArmadillo.hのいろいろも使えている(ここも参考) C:\Users\hogeUserName\Documents\R\win-library\3.0\RcppArmadillo\include\RcppA…

self-avoiding pathの続き。複数のagents

こちらでself-avoiding pathを書いてみた。データ型宣言も体系的に勉強せずに、みようみまね、検索・検索真似で書いているので、なかなか大変 コンパイルはするけれど、データ格納場所(アドレス)指定の破たんなどが頻発するので、しょっちゅう止まります そ…

ループ盛りだくさんの処理を比較する

こちらにself-avoiding pathのシミュレーションがある Rcppを使って比較してみる #include <RcppArmadilloExtensions/sample.h> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp ; // [[Rcpp::export]] using namespace Rcpp; IntegerMatrix selfAvoidingPathCpp2(int k,int past,in</rcpparmadilloextensions/sample.h>…