Rcpp
Rcppパッケージには、Rcppを介してcppを使ったパッケージの見本を作成する関数 Rcpp.package.skeleton() がある Rstudioで新たにcppファイルを作成して、然るべきフォルダに保存して Rcppパッケージの compileAttributes() 関数を実行して、出来上がり あと…
Armadilloの中身をみるためにはここからダウンロード RcppArmadilloの中身を見るためにはこのgithubへアクセス まずは、Armadilloが何かを確認しよう C++で素敵に線形代数をやるためのライブラリで、LAPAKとかに依存している(依存せずに使ってもよいらしいけ…
この記事の「なんちゃってRパッケージ」はこちら Here is the github containing files and directories handled in this note. Rcppのよさは、Rcppファイルを作ると、Cpp関数をRから呼び出す関数(ラッパー関数)を書く必要がないこと Rxpp is a package to u…
少しC++がわかってきたので、写経をしてもよい頃かも知れない こちらに数値計算系のサイトがあって、おもしろそう Advanced RのRcppのセクションも助走によい→Rcppの準備の確認はこちらで
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>…
『ループで繰り返し計算』 その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>…
『簡単な計算』 その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パッケージがワークすることの確認 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…
準備: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パッケージで提供される、cppコードとして使う関数なんだけれども、その名称がうまいことR本体の関数と同じように作ってあって、Rの関数を思い出しながらcppを書けるようにしてくれている一群の「Rユーザを甘やかす関数」のこと …
2015年の年始にRcppについて調べ物をした。記事が散在したので整理しておく 大きく2系統 (1)Rを使えることを前提にベクトル・行列処理をRcpp化するための実践記録 (2)RでCppを使うにあたってCppってどういう構成になっていて、どうやって「あったらいいな」…
ArmadilloはC++の線形代数ライブラリなのだけれど、Rで使うときにはRcppArmadilloパッケージを介して使う手がある(C++のArmadilloをC++を書くときに使ってもよいのだろうけれど、それより「R Armadillo連携に特化しているということだろう Rcpp自体の代りにR…
STLとは 色々あるけれど、いくつかの大事な塊がある (1)Iterator (繰り返し処理のための仕組み) (2)アルゴリズム (3)データ構造 (1) Iterator 地道にベクトルの要素アドレスを指定して回すこともできるが… double sumC(NumericVector x) { int n = x.size();…
Rcpp sugar これは、C++なんだけど、Rと同じように書けるようにしてある関数についてのこと たとえば、Rではベクトル化計算ができるし、そうするのが速いのだが、C++ではループを回すのが普通。ただし、ベクトル化演算が基本演算でできるようにC++でsugar登…
Rcppの基礎は前掲記事で終わり。ただループ処理を速くしたいだけなら、それだけでもたぶんOK C++でR的に書きたい→sugar 、データ構造やアルゴリズムで便利なライブラリを使いたい→STL (その先にboost)、RcppArmadilloなどがある C++、コンパイラに負荷がか…
Rcppを使ってみた(こちら) おおまかに分かったので、じゃあ、Rcpp/Cppの強みについておさらいしておこう 一番の基本(この記事) 少し先(sugar,STL,Armadillo) こちらを読む Rcppをいつ使う? Rのコードでできるだけのことをしても「遅い」とき それはいつ? …
完全2部グラフから、条件を満たす辺のリストを作る 2部グラフの一塊はx+y+z+w=n-1のベクトルの集まり、もう一塊がx+y+z+w=nのベクトルの集まり それぞれ、相当のベクトル数ではあるけれど、全ペアの距離を調べてリストアップする ただし、出来上がるエッジ…
頂点数を数える 頂点数はただの漸化式。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を覚えてみようか、そのための地ならし情報収集をしてみよう、という記事を書いた。 その実践編。『自分のためにRcppを使ってみる 〜RstudioでC++を覚える』 課題を以下のように設定する。 d=4次元立方格子の非負整数格子を考える 格子はハミン…
C++とRとのコードの書式を描き分けながら…→参考 このpdf \documentclass{jsbook} \usepackage{amsmath,amssymb} \usepackage{bm} %\usepackage{graphicx} \usepackage{ascmac} \usepackage[dvips]{graphicx} \usepackage{graphicx} \usepackage{bigdelim,mul…
#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()のlist argumentはpackage.skeletonのそれとは違って、挙動が不明なのでひとまず使わない方針とする 次の3ファイル(2ファイルがc++,1ファイルがRのコードとする) c++のヘッダファイルも作った方がよいような…
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 #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>…
""はここにあるように、RcppArmadilloでRの乱択ができるように書かれたhファイルだが、その中で#include しているので、RcppArmadillo.hのいろいろも使えている(ここも参考) C:\Users\hogeUserName\Documents\R\win-library\3.0\RcppArmadillo\include\RcppA…
こちらで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>…