2016-04-28 11 views
1

おはようございます。Rcppを外部ヘッダーとライブラリと同期させてバッチジオコーディングパッケージを構築する

目標:Windowsを実行しているマシン上のRStudioからRCPPを使用してニューヨーク市都市計画局のGeosupportソフトウェアに基づいてバッチジオコーディングパッケージを作成しようとしています。 Geosupportは、建物の識別番号や国勢調査な​​どの座標以外の多くの有用な情報を返します。このようなパッケージは、NYCのデータを扱う研究者やコミュニティの支持者にとって非常に有用な可能性を秘めていると私は思う。

背景:GeosupportはNYC DCP websiteで無料でダウンロードできます。このダウンロードには、バッチジオコーディング(GBATと呼ばれる)用のインターフェイスが付属しています。さらに、C、C++、またはVBを使用して作成されたアプリケーションからジオコードできるように、ヘッダ、データ、およびライブラリファイルが用意されています。ライブラリファイルはDLL拡張子を持ち、C言語でコンパイルされています(C++ではなく、私は開発者の一人にチェックしました)。

ステータス:これまでのところ、私はヘッダファイルを組み込み、作業領域を設定することができました。私はCライブラリの関数を使用しようとすると問題に遭遇します。私はWriting R Extensionsを読んでいます - Makevarsを使用していますが、進める方法についてはまだ分かりません。 RStudioのRtoolsでRCPPを使ってパッケージを作りましたが、makevarsファイルは生成されませんでした。私はDirkの本(私のような投稿で参照されている)を購入しましたが、まだ到着していません。

ありがとうございました!

グレッチェン

更新されたコードは... 2016年5月3日は午前19時45分ESTで: パーCoatlessの提案、私はGitHub repositoryを作成しました。また、Makevars.winとMakevarsファイルを作成し、ヘッダーファイルをinst/includeに再配置しました。ヘッダーは正常に機能しますが、私はまだライブラリをどうするか分かりません。また、ジオコーダーを駆動する基礎となるデータファイルがGitHub(1.85 GB)には大きすぎます。私は私の家のコンピュータからGit LFSを使ってそれらを追加しようとします。

答えて

4

本はありませんか?問題ない!

まず、Rcpp.package.skeleton()経由パッケージスケルトンを作成することにより、パッケージ構造を理解したりRStudioのCreate an Rcpp Packageビットを使用するようにしてください。

vignettesには多くの例があり、オンラインにはRcpp's galleryがあります。

まずバットオフ、困難の主な理由は、使用されています。それはRパッケージの典型的なファイル構造に反するとして

#include "../Include/NYCgeo.h" 

は、これは良いスタイルではありません。ライブラリヘッダーを使用しようとすると、1はどちらかのパッケージ構造を選ぶ必要があり

:このアプローチでは

R/ 
src/ 
|- Makevars 
|- Makevars.win 
|- header.h 
|- action.cpp 
man/ 
DESCRIPTION 
NAMESPACE 

は、あなたのヘッダファイルは、単にパッケージに制限されています。LinkingTo:DESCRIPTIONファイル内のアプローチと、一般的に、より良い介在物を有効にするには、あなたが目指すべき構造は以下の通りである。したがって

R/ 
inst/ 
|- include/ 
    |- header.h 
src/ 
|- Makevars 
|- Makevars.win 
|- action.cpp 
man/ 
DESCRIPTION 
NAMESPACE 

action.cppファイルにあなただけ使用することができます。

#include <header.h> 

対を

ここで、MakevarsMakevars.winのファイルの内容はです/inst/include中の含むヘッダは次のようになります。

PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) 
PKG_CPPFLAGS = -I../inst/include/ 

二行目が最も重要です。

非常に単純なファイルの例については、sitmo {免責条項:Rパッケージを作成しました}を参照してください。

より激しく興味深いバージョンについては、dplyrを参照してください。

完全なコードをGitHubにコードすると、より多くのヘルプが提供されます。

+0

非常に患者、非常に良い:ここで

R/ inst/ |- include/ |- header.h src/ |- Makevars |- Makevars.win |- action.cpp bin/ |- MyLibrary.dll man/ DESCRIPTION NAMESPACE 

は私Makevars/Makevars.winファイルです。 –

+0

これは優れていて、コートレスです!このような徹底した説明を作成していただきありがとうございます。コードを自分のGitHubアカウントに掲載します。 – gmculp

+0

このプロジェクトの[GitHubリポジトリ](https://github.com/gmculp/RGBAT)へのリンクを含むように質問を更新しました。私はCoatlessの反応を利用してヘッダーを動作させることができました。私はまだどのように私は[Binフォルダ](https://github.com/gmculp/RGBAT/tree/master/Bin)を参照してdllファイルの場所を反映するために、Makevars/Makevars.winファイルを調整することができます混乱している。 – gmculp

1

私はCライブラリMyLibrary.dllの機能に、Coatlessの応答を使用してアクセスできました。ここで

は私のディレクトリ構造です:

PKG_LIBS = -L../bin -lMyLibrary 
PKG_CPPFLAGS = -I../inst/include/ 
関連する問題