2017-08-14 44 views
1

我有一堆R scripts做一些计算并返回结果。我正计划构建一个PHP网站,用户可以实际提交表单,将数据传递给我的R脚本,处理并将结果返回给PHP并更新接口。如何从PHP调用R脚本?

该计划是有一个数据库,所以当用户提交表单时,数据被存储在数据库中,因此R可以读取,处理输入,然后将结果插入数据库,以便PHP可以抓取它。但是,有两个问题:

  1. 我的R脚本如何知道某些值已存储在数据库中,以便它可以获取这些值并执行处理?
  2. 当我的R脚本完成数据处理并将其插入到MySQL数据库时,我如何让PHP知道此时PHP需要查询数据库并获取值?

比方说,我的[R脚本是这样的:

range<-1:20 
m<-mean(range) 
s<-sum(range) 
print(m) 
print(s) 

正如你可以在这种情况下看到输入会120来定义范围,并且输出到显示值ms在我的网页上。

任何想法如何实现? 谢谢!

回答

0

我没有R专家,但它已经完成: /poorman.php

echo " 
"; 
echo "Number values to generate: 
"; 
echo "Submit"; 
echo "" 
; 

if(isset($_GET['N'])) 
{ 
    $N = $_GET['N']; 

    // execute R script from shell 
    // this will save a plot at temp.png to the filesystem 
    exec("Rscript my_rscript.R $N"); 

    // return image tag 
    $nocache = rand(); 
    echo(""); 
} 
?> 

和将R脚本...

my_rscript.R

args <- commandArgs(TRUE) 

N <- args[1] 
x <- rnorm(N,0,1) 

png(filename="temp.png", width=500, height=500) 
hist(x, col="lightblue") 
dev.off() 

source

+0

基本上,你告诉我,我根本不需要数据库? – Riad

+0

你可以直接执行r脚本,是的。 – catbadger

+0

在源代码中,他们提到一次只有一个用户可以使用这个Web应用程序..我明白,因为R脚本将会忙于处理输入..我的脚本如何处理并发请求? – Riad

1

shell_exec()exec() a很可能您在PHP中选择的是最佳选择。 This answer explains the difference.

echo shell_exec("Rscript my_script.R {$_GET['range']}"); 
+0

所以我不需要在这里使用mysql数据库? – Riad

+0

如果您需要输入在页面加载时保持不变,则将输入存储在数据库中。如果每次调用中都有大量的数据,并且您正在使用数据库作为在语言之间保存数据的方式,那么很好(但这在问题中并不明确)。如果数据只是传递和简短的数据,则没有理由涉及数据库。 – alttag

+0

谢谢您的回复..这是有帮助的 – Riad