perl中如何挪用R语言
当前位置:以往代写 > 其他教程 >perl中如何挪用R语言
2019-06-14

perl中如何挪用R语言

perl中如何挪用R语言

以下是从网上收集的从perl中挪用R的要领:
1 直接用system()呼吁
好比有个test.R措施,可以通过下面的方法挪用:
system(“R <test.R –vanilla”)
2 安装模块RSperl
该模块的详细先容http://www.omegahat.org/RSPerl/
安装进程如下:
tar zxf RSPerl_0.9-0.tar.gz
R CMD INSTALL –configure-args=’–with-in-perl’ RSPerl
cd RSPerl/src
make -f Makefile.perl install
配置情况变量:
$R_LIBS:配置需要的R的包的位置,默认是$R_HOME/library/。
$PERL5LIB:配置需要的perl包(R.pm,RReferences.pm,R.so)的位置。
RSPerl/scripts /目次里提供了两个配置情况变量的shell呼吁文件,可以直接利用:source RSPerl/scripts/RSPerl.csh
3 利用perl中的module Statistics::R
(转自http://cos.name/bbs/simple/index.php?t16122.html)
用Statistics::R ,既可合用于Win32平台,也可在Linux 中利用。
不外Win32平台安装模块要在cmd呼吁行中利用cpan举办安装,而ActivePerl的PPM找不到安装模块。
模块有一共有四个:Statistics::R
Statistics::R::Bridge
Statistics::R::Bridge::Win32
Statistics::R::Bridge::pipe
不外仿佛先安装第二个,再安装第一个,后边2个仿佛会自动安装(我装的时候没留意,横竖用cpan再装多一次也无防)
以下是一个在Win32平台的示例:输出一个矩阵及打印输出矩阵的行例数:
--------------------------------------------------------

#!usr/bin/perl-w
use Statistics::R;
my $R = Statistics::R->new() ;
$R->startR ;
$R->send(qq`A=rbind(c(76.0, 91.5, 85.5, 82.5, 79.0, 80.5, 74.5,79.0, 85.0, 76.5, 82.0, 95.0, 92.5), \n
c(50, 20, 20, 30, 30, 50, 60, 50, 40, 55,40, 40, 20), \n
c(120, 141, 124, 126, 117, 125, 123, 125,132, 123, 132, 155, 147)) \n`) ;
$R->send(qq`ncol=ncol(A);nrow=nrow(A) \n print(paste(“矩阵A是”,nrow,”行”,ncol,”例矩阵”,sep=””)) `);
my $ret = $R->read;
print $ret,”\n”;
$R->send(qq`print(A)`);
my $ret = $R->read;
print $ret;
$R->stopR();

#注:$R->read只能读取到R最后一次的输出信息,所以R每输出一次信息就需挪用一次$R->read,然后将其功效用print在perl中打印输出
-------------------------------------------------------
输出功效为:
[1] “矩阵A是3行13例矩阵”
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
[1,] 76 91.5 85.5 82.5 79 80.5 74.5 79 85 76.5 82 95 92.5
[2,] 50 20.0 20.0 30.0 30 50.0 60.0 50 40 55.0 40 40 20.0
[3,] 120 141.0 124.0 126.0 117 125.0 123.0 125 132 123.0 132 155 147.0
-------------------------------------------------------
一般人但愿用perl挪用R的目标 应该不可是但愿获得R的处理惩罚功效,而是但愿perl能操作R内部的大量科学计较函数:
如果要将变量从perl传入R中举办计较(如将$a=1传进R),或要将挪用R函数计较出的功效值传入perl再举办后续处理惩罚(如
将向量c(1,2,3,4,6)的均值加上$a的功效传入perl后操作perl再举办加2处理惩罚),可以如下写剧本:
#!usr/bin/perl-w
use Statistics::R;
my $a=1;
my $R = Statistics::R->new();
$R->startR;
$R->send(qq`x=c(1,2,3,4,6) \n y=mean(x) \n z=$a+y \n print(z)`) ;
my $ret = $R->read;
print $ret,”\n”; #输出R的处理惩罚功效
$R->stopR();
$ret=~s/\[\d\]\s+(\d+)/$1/g;
my $b=$ret+2;
print $b;#输出最终功效
小我私家感受照旧用system()函数较量利便,其他两种都有点贫苦。

    关键字:

在线提交作业