R 上での gfortran 関数の使用方法と、ネット接続のない環境での関連ソフト群のインストール平成 21 年 7月必要なもの   ※ [  ]内は実際に使用したバージョン1. R [2.8.1] 統計ソフト2. Rtools [28] R ...
3. ActivePerl http://www.activestate.com/downloads/- ActivePerl-5.10.0.1003-MSWin32-x86-285500.msi4. MinGW + gcc + MSYS ht...
C. 環境設定1. Path 変数の確認と追加「コントロールパネル」=>「システム」を選び、「詳細設定」タブの下方にある「環境変数」ボタンを押す。二つある窓のうち、下の「システム環境変数」から「Path」を探し、編集ボタンを押す。まず、Path...
動作確認 例: Gramm-Schmidt の直交化法ステップ 1 : プログラムの作成 b に適当な数値の入った正方行列を渡すと、それを直交化して戻すプログラム。dot_product は行列の内積を計算する関数。R で利用できるようにするた...
以下は、コンパイルがうまくいったときの MSYS コンソールの出力例。ステップ 3 : 実際に R から Fortran サブルーチンを使う   R を起動し、>(プロンプト)が表示されたら以下のコマンドを入力(コピー&ペースト)する。   ま...
   以下は結果出力。
   以下は結果出力。
Upcoming SlideShare
Loading in...5
×

R上でのgfortran利用法と、ネット接続のない環境での関連ソフトのインストール

787

Published on

 gfortranのプログラムを作成してRから使用することを目的に、インターネット接続のない環境下で必要なソフト類をインストールする方法をご紹介し、gfortranで任意の正方行列を与えたときにGramm-Schmidtの直交化を行う小さなプログラムを例に、プログラムをコンパイルしてRで実行できるdl形式のlファイルを作成し、実際にRからこのサブルーチンを使用するというデモを行っています。
 フォルダを整理していて出てきた昔の資料ですが、特殊環境下でのMinGWインストールは若干苦労したので、掲載してみることにしました。最新ソフトでやり直す余力はなかったのですが、リンク類が生きているかどうかだけは確認し、今回のアップに辺り当時のものを若干リバイスしています。

Published in: Education
1 Comment
0 Likes
Statistics
Notes
  • 最後の結果出力が、ファイルをアップすると原稿にはない重複が起こり、再アップロードしても修復されません。ご容赦ください。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
787
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

R上でのgfortran利用法と、ネット接続のない環境での関連ソフトのインストール

  1. 1. R 上での gfortran 関数の使用方法と、ネット接続のない環境での関連ソフト群のインストール平成 21 年 7月必要なもの   ※ [  ]内は実際に使用したバージョン1. R [2.8.1] 統計ソフト2. Rtools [28] R のビルド環境を提供するもの3. ActivePerl [5.10.0.1003] Perl インタプリタ4. MinGW (+gcc) [5.1.4]5. MSYS [1.0.11]6. gfortran [2009/04/21 版] gcc コンパイラの一部7. サクラエディタ [1.6.3.0] Fortran 対応のエディタ使用許諾/ライセンス1. R GNU GPL(General Public License 一般公衆利用許諾契約書)2. Rtools GNU GPL(General Public License 一般公衆利用許諾契約書)3. ActivePerl ActiveState Community License4. MinGW GNU GPL(General Public License 一般公衆利用許諾契約書)5. MSYS GNU GPL(General Public License 一般公衆利用許諾契約書)6. gfortran GNU GPL(General Public License 一般公衆利用許諾契約書)7. サクラエディタ なし※ GNU とは、FSF が進めている UNIX 互換ソフトウェア群の開発プロジェクトの総称。フリーソフトウェアの理念に従った修正・再配布自由な UNIX 互換システムの構築を目的としている。GNU で開発されたソフトウェアに適用されている GPL は、「あらゆるソフトウェアは自由に利用できるべき」という FSF の理念を体現したライセンスとして知られている。※ GPL(GNU 一般公的使用許諾)とは、FSF の理念に基づいて明文化されたソフトウェアライセンス体系。主に GNU プロジェクトで開発されたソフトウェアや、その派生物などに適用されている。ソースコードの公開を原則とし、使用者に対してソースコードを含めた再配布や改変の自由を認めている。また、再配布や改変の自由を妨げる行為を禁じている。※ FSF とは、Richard Stallman 氏がフリーソフトウェアの普及を目的として創設した非営利の民間団体。ソースコードとともに公開され、誰でも自由に修正・再配布を行えるソフトウェアを「フリーソフトウェア」と呼んでいる。インストール 以下は、インターネット環境のない Windows Vista PC へのインストール手順を紹介するもの。ネット環境がある場合と違う部分は、R のパッケージ群が自動でダウンロードできないのであらかじめ zip ファイルを必要なパッケージについて用意することと、MinGW のインストーラが使えないこと。作業には、圧縮・解凍ソフト「lhaplus」を使用している。A. 下準備: 必要なインストールファイルの収集 それぞれ、以下のファイルを集める。1. R: http://cran.md.tsukuba.ac.jp/bin/windows/base/- R-2.8.1-win32.exe (ただし現在の最新版は、R-2.9.1-win32.exe)2. Rtools: http://www.murdoch-sutherland.com/Rtools/index.html- Rtools28.exe擬似 UNIX 環境を提供するもの
  2. 2. 3. ActivePerl http://www.activestate.com/downloads/- ActivePerl-5.10.0.1003-MSWin32-x86-285500.msi4. MinGW + gcc + MSYS https://sourceforge.net/projects/mingw/files/- w32api-3.13-mingw32-dev.tar.gz (MinGW API for MS-Windows)- binutils-2.9.1-mingw32-bin.tar.gz (GNU binutils)- mingwrt-3.15.2-mingw32-dev.tar.gz (MinGW Runtime)- gcc-core-3.4.5-20060117-3.tar.gz (C コンパイラ)- MSYS-1.0.11-2004.04.30-1.exe (MSYS)- gcc-g++-3.4.5-20060117-3.tar.gz (C++コンパイラ)- gcc-g77-3.4.5-20060117-3.tar.gz (Fortran77 コンパイラ)- gcc-objc-3.4.5-20060117-3.tar.gz (Objective C コンパイラ)※ 赤字のものは必須。※ インターネット利用可能な環境下でインストールできる場合は、これらを一つずつ揃える代わりに MinGW-5.1.4.exe だけをダウンロードして実行すれば、インストーラが必要なファイル群を自動でダウンロードしてインストールする。5. gfortran http://gcc.gnu.org/wiki/GFortranBinaries- gfortran-windows.exe (mingw build)6. サクラエディタ- sinst1-6-3-0.exe http://sourceforge.jp/projects/sfnet_sakura-editor/releases/ http://sakura_editor.at.infoseek.co.jp/snapshot.html- fortran-sakura.ziphttp://www.esst.kyushu-u.ac.jp/~space/kumashiro/fortran.html※ 後者は、個人が提供するサクラエディタ用 Fortran 設定ファイルB. インストール1. RR 本体は、R-2.8.1-win32.exe をクリックするとインストールされる。2. RtoolsRtools28.exe をクリックしてインストール。C:Rtools へ。3. ActivePerl [参考: http://pocketstudio.jp/win/activeperl/ ]ActivePerl-5.10.0.1003-MSWin32-x86-285500.msi をクリックしてインストール。C:Perl へ。4. MinGW + gcc [ 参 考 :http://katahiromz.web.fc2.com/win32/mingw.html ]まず、フォルダ c:MinGWを作成。ファイルを一つずつ、圧縮・解凍ソフト「lhaplus」のアイコンの上に落とし、適当にフォルダを切って解凍し、c:MinGWの下に収めていく。5. MSYSMSYS-1.0.11-2004.04.30-1.exe をクリックしてインストール。C:MSYS へ。6. gfortrangfortran-windows.exe をクリックしてインストール。C:gfortran へ。7. サクラエディタ1 本体は、sinst1-6-3-0.exe をクリックしてインストール。[参考: http://sakura.qp.land.to/?Install ]2 Fortran 設定ファイルの使用法は、以下のサイトを参照。[参考: http://www.esst.kyushu-u.ac.jp/~space/kumashiro/fortran.html ]
  3. 3. C. 環境設定1. Path 変数の確認と追加「コントロールパネル」=>「システム」を選び、「詳細設定」タブの下方にある「環境変数」ボタンを押す。二つある窓のうち、下の「システム環境変数」から「Path」を探し、編集ボタンを押す。まず、Path 変数の先頭に、以下のものが入っていることを確認し、なければ追加する。c:Rtoolsbin;cmsys1.0bin;c:MinGWbin;c:RtoolsMinGWbin;c:Perlbin;次に、Path 変数の後ろの方に以下のものが入っていることを確認し、なければ追加する。d:PGMRR-2.8.1bin;C:gfortranlibexecgcci586-pc-mingw324.5.0;C:gfortranbin※「d:PGMRR-2.8.1bin」部分については、各人がインストールした R のバイナリファイルのパスに応じて指定すること。2. 環境変数の追加・ システム環境変数の「新規」ボタンをクリック。「変数名」に C_INCLUDE_PATH、「変数値」に「C:MinGWinclude」を入力、「OK」ボタンを押す。・ シ ス テ ム 環 境 変 数 の 「 新 規 」 ボ タ ン を ク リ ッ ク 。 「 変 数 名 」 にCPLUS_INCLUDE_PATH、「変数値」に「C:MinGWinclude」を入力、「OK」ボタンを押す。・ システム環境変数の「新規」ボタンをクリック。「変数名」に LIBRARY_PATH、「変数値」に「C:MinGWlib;c:gfortranlib」を入力、「OK」ボタンを押す。・ シ ス テ ム 環 境 変 数 の 「 新 規 」 ボ タ ン を ク リ ッ ク 。 「 変 数 名 」 にCPLUS_INCLUDE_PATH、「変数値」に「C:MinGWinclude」を入力、「OK」ボタンを押す。・ システム環境変数の「新規」ボタンをクリック。「変数名」に MINGW_DIR、「変数値」に「C:MinGW」を入力、「OK」ボタンを押す。
  4. 4. 動作確認 例: Gramm-Schmidt の直交化法ステップ 1 : プログラムの作成 b に適当な数値の入った正方行列を渡すと、それを直交化して戻すプログラム。dot_product は行列の内積を計算する関数。R で利用できるようにするためには、Fortranプログラムは必ずサブルーチンにする必要がある。作業ディレクトリ d:FTに、このプログラムを、Fgso.f90 という名前で保存する。ステップ 2 : プログラムをコンパイルして実行形式の dll ファイルを作成   MSYS を起動し、$(プロンプト)が表示されたら、以下のようなコマンドを入力する。一行目がカレントディレクトリを dFTに変え、二行目でコンパイルして R で利用可能な dllファイルが生成される。何かエラーがあれば、MSYS 画面にエラー内容が表示され、dll ファイルは作成されない。subroutine Fgso(n, b)implicit noneinteger, intent(in) :: n ! 正方行列の大きさreal(8), intent(inout) :: b(n, n) ! 形状明示仮配列real(8) wk1(n), wk2(n), wk3(n) ! 計算用ベクトル変数integer i, j ! カウンタwk1 = sqrt(dot_product(b(1, 1:n), b(1, 1:n)))b(1, 1:n) = b(1, 1:n) / wk1do i = 2, nwk1 = b(i, 1:n)do j = 1, i - 1wk2 = b(j, 1:n)wk3 = dot_product(wk1, wk2)b(i, 1:n) = b(i, 1:n) - wk3 * wk2enddowk2 = sqrt(dot_product(b(i, 1:n), b(i, 1:n)))b(i, 1:n) = b(i, 1:n) / wk2enddoendcd d:FTR CMD SHLIB Fgso.f90
  5. 5. 以下は、コンパイルがうまくいったときの MSYS コンソールの出力例。ステップ 3 : 実際に R から Fortran サブルーチンを使う   R を起動し、>(プロンプト)が表示されたら以下のコマンドを入力(コピー&ペースト)する。   まずは下準備で、必要があれば作業領域をクリアし、呼び出す dll ファイルがあるサブディレクトリをカレントディレクトリに設定する。dll ファイルを呼び出した後、Fortran プログラムを含む R 関数 gso を定義し、この R 関数を通して Fortran プログラム Fgso を使用することになる。下のテストは、変数 a に下のような 4 行 4 列の行列をセットし、関数 gso で直交化し、結果を行列 c にセットしている。行列 c が直交行列になっていれば、自分自身を転置したものと内積をとると直交行列になる。# rm(list=ls(all=TRUE)) # 全消去setwd("d:/FT/") # カレントディレクトリを d:FT にdyn.load("Fgso.dll") # 作成した Fortran の dll ファイルをロード# Wrappergso <- function(n, b){out <- .Fortran("Fgso",n = as.integer(n),b = as.double(b))}a <- matrix(c(1,0,-1,0,0,-1,0,1,2,0,1,1,1,1,1,0), nrow=4, ncol=4)out <- gso(4, a) # 結果を out に格納, $b が結果c <- matrix(out$b, nrow=4, ncol=4)# 結果はリスト化してしまうので、行列(matrix)に再構成している。c # 結果表示c %*% t(c) # 単位行列になったら検算 OKdyn.unload("Fgso.dll") # つかんでいるファイルを解放
  6. 6.    以下は結果出力。
  7. 7.    以下は結果出力。

×