2016-04-03 4 views
0

私は.cpp file(クラスだと思います)をブラックボックスと見なします:入力として特定のフォーマットの.txt fileが必要で、別の.txt fileが出力として出力されます。C++パイプライン全体をRからブラックボックスとして実行する

Rの中からこのコードを使用するにはどうすればよいですか? Rcppパッケージは行く方法と思われますが、Webを閲覧すると、Rから単一のC++関数を呼び出すことについてはわかっています(例えば、// [[Rcpp::export]])。しかし私の場合、私は特定の機能に興味がありません。私はちょうど、...ブラックボックスとして独立してRの

答えて

3

を全体C++のスクリプトを実行し、あなたのC++コンパイラ

g++ imtd.cpp -o imtd 

生産実行でそれをコンパイルして、入力ファイルを生成するRプログラムを作成したいです、edgelist.txtは、R shellコマンドを使用して実行可能ファイルを実行してに戻って、出力ファイルedgelist-out.txtを読む:あなたはこのためにRcppを必要としない

shell("imtd edgelist") 

# read edgelist-out.txt into R 
# - the first field of the first line contains the number of triangles 
# - lines containing a comma have 3 fields separated by one or more punctuation characters 
# - there are some class counts at the end which we recompute rather than read 

L <- readLines("edgelist-out.txt") 

no.of.triangles <- read.table(text = L, nrow = 1)[[1]] 

# extract lines with a comma, replace punctuation with space & create 3 column data frame 
DF <- read.table(text = gsub("[[:punct:]]", " ", grep(",", L, value = TRUE))) 

# rather than read in the class counts compute them from DF 
tab <- table(DF$V3) # table of class counts 

。上記のことは、要求された通り、入力ファイルと出力ファイルのフォーマットのみを知っているブラックボックスとしてファイルを扱うことを可能にする。

+0

が優れています。どうもありがとう。私があなたの答えを受け入れるようになった後、明日の朝にこの最初のことを試してみましょう。 – Antoine

+1

もちろんこれはうまくいきますが、外部実行ファイルを呼び出すことは最もコストがかからず効率が悪いフォームです。それがあなたのために十分であれば、うまくいけば - それ以外の場合は、コードを呼び出し、Rcppはインターフェースを提供します。 –

関連する問題