R必须在R控制台下执行么,如果能在dos下运行,可不可以用perl来调用
请问可以用perl调用R么
The Omega Project for Statistical Computing
RSPerl Package
RSPerl Package
参见早先的帖子: http://cos.name/bbs/read.php?tid=3404&page=1#24088
用perl调用R
先临时创建一个R script文件
open(F,">rsvd.r")or die "error";
print F "sink(\"c:\\\\R_svd_result.out\")\n";
print F "svdsource=read.table(\"$datafile\")\n";
print F "svdresult=svd(svdsource)\n";
print F "svdresult\n";
print F "sink()\n";
close F;
调用R执行这个临时Rscript,sink把R的运行结果重定向到C:\r_svd_result.out中,Perl将对这个结果再处理
system("R --restore --no-save <rsvd.r");
以下读R输出结果,
open(F,"c:\\R_svd_result.out")or die "error";
blablabla.....
用perl调用R
先临时创建一个R script文件
open(F,">rsvd.r")or die "error";
print F "sink(\"c:\\\\R_svd_result.out\")\n";
print F "svdsource=read.table(\"$datafile\")\n";
print F "svdresult=svd(svdsource)\n";
print F "svdresult\n";
print F "sink()\n";
close F;
调用R执行这个临时Rscript,sink把R的运行结果重定向到C:\r_svd_result.out中,Perl将对这个结果再处理
system("R --restore --no-save <rsvd.r");
以下读R输出结果,
open(F,"c:\\R_svd_result.out")or die "error";
blablabla.....
看不大懂,能否解释一下,上面那个是Rscript的内容么,应该是Rscript.pl吧
用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平台的示例:输出一个矩阵及打印输出矩阵的行例数:
--------------------------------------------------------
#注:$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处理),可以如下写脚本:
不过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<br />
use Statistics::R;<br />
<br />
my $R = Statistics::R->new() ;<br />
$R->startR ;<br />
$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 <br />
c(50, 20, 20, 30, 30, 50, 60, 50, 40, 55,40, 40, 20), \n<br />
c(120, 141, 124, 126, 117, 125, 123, 125,132, 123, 132, 155, 147)) \n`) ;<br />
$R->send(qq`ncol=ncol(A);nrow=nrow(A) \n print(paste("矩阵A是",nrow,"行",ncol,"例矩阵",sep="")) `);<br />
my $ret = $R->read;<br />
print $ret,"\n";<br />
$R->send(qq`print(A)`);<br />
my $ret = $R->read;<br />
print $ret;<br />
$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<br />
use Statistics::R; <br />
my $a=1;<br />
my $R = Statistics::R->new(); <br />
$R->startR;<br />
$R->send(qq`x=c(1,2,3,4,6) \n y=mean(x) \n z=$a+y \n print(z)`) ; <br />
my $ret = $R->read;<br />
print $ret,"\n"; #输出R的处理结果<br />
$R->stopR();<br />
$ret=~s/\[\d\]\s+(\d+)/$1/g;<br />
my $b=$ret+2;<br />
print $b;#输出最终结果
不过感觉运行速度有点慢........12 天 后
thanks very much
安装出错,不知道是怎么回事
checking if your kit is complete....
looks good
warning: PERL_LIB <c:\vanilla-perl\perl\lib> seems not to be a perl library directory
<Exporter.pm not found> at d:/Rtools/perl/lib/ExtUtils/MM_Unix.pm line 1668
Have D:\Rtools\perl\lib\Config.pm expected C:\vanilla-perl\perl\lib\config.pm
your perl and your config.pm seem to have different ideas about the architecture they are running on.
perl thinks:[lib]
config says:[MSwin32-x86-multi-thread]
我用的vista64
checking if your kit is complete....
looks good
warning: PERL_LIB <c:\vanilla-perl\perl\lib> seems not to be a perl library directory
<Exporter.pm not found> at d:/Rtools/perl/lib/ExtUtils/MM_Unix.pm line 1668
Have D:\Rtools\perl\lib\Config.pm expected C:\vanilla-perl\perl\lib\config.pm
your perl and your config.pm seem to have different ideas about the architecture they are running on.
perl thinks:[lib]
config says:[MSwin32-x86-multi-thread]
我用的vista64
好像产生了两个错误:
1、c:\vanilla-perl\perl\lib不像是perl的解释器的路径,默认安装时是#!usr/bin/perl
2、你的perl与R的没装在同一个盘(不是太确定是否是这个原因),也可能也是第一个错误导致了第二个错误的产生,反正都是环境变量引起的错误,因我是在Windows平台使用perl,没有vista下使用的经验,给不了你太多的帮助。关于perl的问题最好是到perl社区询问,那里牛人多。
1、c:\vanilla-perl\perl\lib不像是perl的解释器的路径,默认安装时是#!usr/bin/perl
2、你的perl与R的没装在同一个盘(不是太确定是否是这个原因),也可能也是第一个错误导致了第二个错误的产生,反正都是环境变量引起的错误,因我是在Windows平台使用perl,没有vista下使用的经验,给不了你太多的帮助。关于perl的问题最好是到perl社区询问,那里牛人多。
谢谢aef25u,认真看了一下错误
把Rtools卸了,上面的问题没了,下载成功,但是还是出错:
writing makefile for Statistics::R
'nmake' is not recognized as an internal or external command,
operable program or batch file.
GMPASSOS/Statistics-R-0.02.tar.gz
nmake-- not ok
...
再去找nmake,只有32位的,没有64位的...惨
附件里是linux下的包,不知道高手可否改一下,改成windows下可用的
把Rtools卸了,上面的问题没了,下载成功,但是还是出错:
writing makefile for Statistics::R
'nmake' is not recognized as an internal or external command,
operable program or batch file.
GMPASSOS/Statistics-R-0.02.tar.gz
nmake-- not ok
...
再去找nmake,只有32位的,没有64位的...惨
附件里是linux下的包,不知道高手可否改一下,改成windows下可用的
为什么一定要使用vista呢,改装系统可比修改模块容易多了.........
我的水平也就是使用别人写好的模块或自已因工作需要写点小程序,还达不到改别人的东西的水平,所以帮不了你
关于windows cpan安装模块的问题可以看看这编文章:http://lovekernel.blog.sohu.com/94367900.html
关于namke的下载可以到:http://support.microsoft.com/default.aspx?scid=kb;en-us;Q132084
要使namke可用,双击下载下来的namke.exe,将生成的3个文件都拷进/perl/bin文件夹下,以后在windows 下用cpan安装CPAN上的模块就不会有nmake-- not ok的问题了
我的水平也就是使用别人写好的模块或自已因工作需要写点小程序,还达不到改别人的东西的水平,所以帮不了你
关于windows cpan安装模块的问题可以看看这编文章:http://lovekernel.blog.sohu.com/94367900.html
关于namke的下载可以到:http://support.microsoft.com/default.aspx?scid=kb;en-us;Q132084
要使namke可用,双击下载下来的namke.exe,将生成的3个文件都拷进/perl/bin文件夹下,以后在windows 下用cpan安装CPAN上的模块就不会有nmake-- not ok的问题了
多谢aef25u ,
在你的提醒下,nmake.exe本来不能在64位下运行,我把它改成nmake.rar,然后解压缩就可以了。哈哈,搞定,谢谢!
在你的提醒下,nmake.exe本来不能在64位下运行,我把它改成nmake.rar,然后解压缩就可以了。哈哈,搞定,谢谢!
不过使用这种方法调用R,缺点大多,玩玩可以,
但话说回来,perl真不愧是胶水语言,R的调用实现简单,而且很容易懂,就是用perl发送R的代码。
要是想通过调用R.dll使用R的库函数,perl应该也能实现,只要你会用C调用R.dll,可以考虑通过perl的Inline 内联来实现。
因R是开源的,又或者像本论坛《VC++中调用 R 的函数》一文提到的那样可以通过抽取函数代码来实现。
但话说回来,perl真不愧是胶水语言,R的调用实现简单,而且很容易懂,就是用perl发送R的代码。
要是想通过调用R.dll使用R的库函数,perl应该也能实现,只要你会用C调用R.dll,可以考虑通过perl的Inline 内联来实现。
因R是开源的,又或者像本论坛《VC++中调用 R 的函数》一文提到的那样可以通过抽取函数代码来实现。