Posts Tagged ‘R’

h1

RSPerl in Ubuntu installieren

16. März 2010

Zusammenfassung

RSPerl erlaubt die Interaktion zwischen Perl und R. Mich hätte vor allem interessiert, R-Funktionen von Perl aus zu verwenden. Das geht irgendwie, dann aber doch auch nicht so super – kurz: Ich verwende es zur zur Zeit nicht, sondern erzeuge mit print FH eine Datei (ein R-Skript), dass ich dann direkt in R ausführe. Trotzdem im folgenden die Vorgangsweise …

Die Schritte

Die in Ubuntu Desktop 9.10 vorhandene R-Installation ist als shared-library kompiliert. Das ist schon einmal gut. Dann braucht man aber noch eine lib installieren:

$ sudo apt-get install libperl-dev

Ab dann lässt sich RSPerl wie dolumentiert installieren:

$ R CMD INSTALL  --configure-args='--with-in-perl' Desktop/RSPerl

(Voraussgesetzt man hat das tar zuvor auf dem Desktop ausgepackt).

http://www.omegahat.org/RSPerl/RFromPerl.html

Das heisst aber noch nicht, dass man R von Perl aus damit erreicht …

Nacharbeiten

$ ./hello_R.pl

Can’t load ‚/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/perl/i486-linux-gnu-thread-multi/auto/R/R.so‘ for module R: libPerlConverter.so: cannot open shared object file: No such file or directory at /usr/lib/perl/5.10/DynaLoader.pm line 196.

at ./hello_R.pl line 7

Compilation failed in require at ./hello_R.pl line 7.

BEGIN failed–compilation aborted at ./hello_R.pl line 7.

Das lässt sich dann mit Umgebungsvariablen unterbinden:

$ export PERL_MODULES="`perl -s modules.pl -modules | sed s/modperl//`"

http://tolstoy.newcastle.edu.au/R/help/03b/7997.html

Letztendlich sollten diese mit export gesetzt sein:

PERL5LIB="/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/perl"
PERL_MODULES="Gtk2 Locale::gettext Gnome2 Cairo LibAppArmor HTML::Parser Sub::Name Glib Compress::Bzip2 Pango UUID Net::DBus Term::ReadKey XML::Parser::Expat Text::CharWidth Text::Iconv IO PerlIO::scalar PerlIO::encoding PerlIO::via SDBM_File Data::Dumper Opcode Fcntl DB_File I18N::Langinfo POSIX IPC::SysV Sys::Syslog Sys::Hostname re Cwd GDBM_File threads ODBM_File attrs Compress::Raw::Zlib Time::HiRes Time::Piece Filter::Util::Call Hash::Util Math::BigInt::FastCalc MIME::Base64 NDBM_File Encode Digest::SHA Digest::MD5 Devel::PPPort Devel::DProf Devel::Peek List::Util File::Glob Storable Socket Unicode::Normalize Text::Soundex "
LD_LIBRARY_PATH="/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/libs:/usr/lib/R/lib"

Doch auch mit diesen Tipps mag R sich nicht von Perl aus aufrufen lassen. Ich denke man muss da andere Wege beschreiten. Zum Beispiel R-Scripts über das system-Komando aufrufen …

$ R -f hello.r --slave; open Rplots.pdf

Unschön, aber es geht.

Wie es dann doch noch lief …

Ok, wenn man den Code der Module patched (da sind grauslige pod-Fehler drin) und auf die Verwendung des eigentlich empfohlenen use RReferences verzichtet, kann man R von Perl aus aufrufen. Sehr vertrauenserweckend ist das aber nicht – schade.

Hier noch das hello_R.pl:

#!/usr/bin/perl -w
use strict;
use warnings;
use lib '/home/ubuntu/R/i486-pc-linux-gnu-library/2.9/RSPerl/perl/i486-linux-gnu-thread-multi';
use R;
#use RReferences;
&R::initR('--silent');
my $x = R::sum((1,2,3));
print $x . "\n";