COLOR(red){SIZE(30){PerlスクリプトからRを起動}}

#contents
~

*Perl 内部から R をバッチモードで実行 [#aea0de90]

以下の Perl スクリプトを数値引数 num で実行すると、log(num) を R で計算する。R のプログラムファイルを Perl 中で作成し、それを COLOR(magenta){<} でバッチモードの R に引き渡すのがミソ。(ソース:r-help の記事)



 ########## Perl スクリプト ##########################
 #!/usr/bin/perl
 (($arg1) = @ARGV) || die "Must pass a numerical argument.?n";
 $script = "/tmp/rwrap$$.R";
 open(SCRIPT, ">$script");
 print SCRIPT <<EOF;
   arg1 <- $arg1
   options(error=expression(q(status=arg1)))
   if (arg1 > 0) log(arg1)
   q()
 EOF
 close(SCRIPT);
 system("R --vanilla --slave < $script");
 ($Rstat = $?/256) && die "Aborted in R with status $Rstat.?n";
 unlink $script;
 #####################################################
 
 $ ./test.perl 2.0     # Unix のコンマンドラインから実行
 [1] 0.6931472         # log(2.0)

実行結果を Perl の内部で受け取る方法は、以下の通り。
 
@array  = `R --vanilla --slave < $script`;  ## 行ごとの文字列を分けて格納

$scalar = `R --vanilla --slave < $script`;  ## 各行を結合して変数に格納



-石岡巌さんの,[[http://www1.accsnet.ne.jp/~gen/R-rev/R-batch-rev.html:http://www1.accsnet.ne.jp/~gen/R-rev/R-batch-rev.html]] などが参考になるのやらならないのやら。


*RSPerl の利用 [#n91292ff]

(そういうものがあるらしい。使ったことのある人の解説を期待)

インストールしてみましたが、下記のようなエラーが出ます。
環境:VineSeed+perl5.8.1+R1.7.0+RSPerl_0.5-7

 $ PERLLIB=/usr/lib/R/library/RSPerl/share/lib/perl5/site_perl/5.8.1/i386-linux-?
 thread-multi:/usr/lib/R/library/RSPerl/share/blib/lib perl  test.pl
 1..1
 Can't load     '/usr/lib/R/library/RSPerl/share/lib/perl5/site_perl/5.8.1/i386-
 linux-thread-multi/auto/R/R.so' for module R: /usr/lib/R/library/RSPerl/libs/
 libPerlConverter.so:  undefined symbol: R_GlobalEnv at
 /usr/lib/perl5/5.8.1/i386-linux-thread-multi/DynaLoader.pm line 229.
  at test.pl line 11
 Compilation failed in require at test.pl line 11.
 BEGIN failed--compilation aborted at test.pl line 11.
 not ok 1

以下のようにインストールすれば、いちおうテストプログラム(RSPerl/inst/tests/の下のファイル)は動作します。(R-2.5.0, Perl 5.8.8)
 R CMD INSTALL --configure-args='--with-in-perl' RSPerl_0.92-1.tar.gz
 export PERL5LIB=/usr/local/lib/R/library/RSPerl/perl:$PERL5LIB
 source /usr/local/lib/R/library/RSPerl/scripts/RSPerl.bsh

でもやっぱりいくつかのプログラムが動きません。
 RSPerl/inst/examples$ perl test4.pl
 Can't locate object method "TIESCALAR" via package "RHashAccessor" at  /usr/local/lib/R/library/RSPerl/perl/i486-linux-gnu-thread-multi/RReferences.pm line 58.



*PDL::R::math [#g8b98ed4]
Perl内からR関数を利用するモジュール
http://search.cpan.org/~cavanaugh/PDL-R-math-0.12/rmath.pd
-実行結果を Perl の内部で受け取る方法ですが, system() の代わりにバッククォート・コマンド `` を使えばよいのでは? たとえば, $output = `R --vanilla --slave < $script`;   if ($output =~ /^?[?d+?]?s+(?S+)/) {  $result = $1;  print "log($arg1) = $result?n";  }   (すみません, 「コメントの挿入」で複数行に分けて入力する方法が分かりません. というか, できるのでしょうか?) --  &new{2004-01-23 (金) 10:39:35};

#comment

* Perl から R を操作するモヂュール Statistics::R (2004.2.23) [#pa58aff2]

r-help 記事を引用

-I have released the new module Statistics::R and need some feedback of it's
status. This will permit the control of the the R (R-project) interpreter through Perl in different architectures and OS. You can for example, start only one instance of the R interpreter and have different Perl process accessing it. What will save the initiation time of R and memory. So, I will appreciate if some one can test it in different OS. Tested with Win32 and Linux. Thanks in advance. Regards, Graciliano M. P.
~
[[URLはここ:http://search.cpan.org/~gmpassos/Statistics-R-0.01/]]

* IPC::Open2 [#td5e43aa]
 #!/usr/local/bin/perl -s
 use strict;
 use FileHandle;
 use IPC::Open2;
 use IPC::Open3;
 
 if (1) {
     my($fhr) = new FileHandle();
     my($fhw) = new FileHandle();
     my($fhe) = new FileHandle();
 
     my($fhOld) = select($fhw); $| = 1; select($fhOld);
     open2($fhr, $fhw,       '/usr/bin/R', '--no-save');
 #   open3($fhw, $fhr, $fhe, '/usr/bin/R', '--no-save');
 
     my($i);
     for($i = 0; $i <= 10; $i++) {
                             # ↓もし ?n となっていたら ¥n です(Wiki が原因?)
         $fhw->print("1:($i*10)\n");      # ↓ここも同様
         $fhw->print("print('EndOfCommands')\n");  # あとでコマンドの終了を検知するため
 
         while($_ = $fhr->getline()) {
             if (/"EndOfCommands"/) {
                 last; # R の処理が終了した
             }
             print;
         }
     }
 
     exit(0);
 }

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS