php 调用 perl,perl中如何调用R语言

以下是从网上收集的从perl中调用R的方法:

1 直接用system()命令

比如有个test.R程序,可以通过下面的方式调用:

system("R

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()函数比较方便,其他两种都有点麻烦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值