2017-08-14 183 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