簡體   English   中英

通過命令行將數組從 php 傳遞給 R

[英]Passing an array from php via command line to R

我有一個問題,我正在通過命令行從 php 執行 R 腳本,我需要給它兩個數組進行計算。

我通過運行來調用腳本:

Rscript nls.R ??? ???

??? 和 ??? 是我需要“提供”給 R 的數組,以便它計算某些值。

任何人都知道如何做到這一點? 它不限於 php,因為它是命令行 - 我只需要知道數組是否可以通過命令行傳遞給 R 以及如何傳遞。

R 將如何捕獲它,使用什么命令?

非常感謝。

問候

您正在尋找的命令是commandArgs()

現在,如果您有一個列表,如果字符串中的整數以逗號分隔,則可以獲得整數

s = '1,2,3,4,5'
your_list = lapply(strsplit(s, ','), as.numeric)[[1]]

可能有更直接的方法來實現這一點。

編輯:

更好的例子(也應該與 Rscript 一起使用)

$ R "1,2,3,4,5"
...

>lapply(strsplit(commandArgs()[[2]], ','), as.numeric)[[1]]
[1] 1 2 3 4 5

假設您想在服務網頁的過程中運行 R,有一些比命令行更好的調用 R 的方法; 問題是 R 解釋器的啟動速度非常慢,你浪費了大量的時間和 CPU 能力來一遍又一遍地啟動它。

例如,您可以使用triggr制作一個小型 R 服務器,並使用由 PHP 套接字制作的客戶端與其對話。
更簡單但更重要的想法是制作一個rApache應用程序,然后使用 CURL 與它對話,或者直接將其用作 AJAX 甚至 HTML 提供程序。

您必須調整 R 腳本並包含對commandArgs()的調用。 當與選項trailingOnly=TRUE ,它將在調用后返回一個帶有空格分隔參數的字符向量。 這將允許您進一步操縱參數。

給定一個腳本 myscript.r:

#My script
x <- commandArgs(trailingOnly=TRUE)
print(x)
print(str(x))

您可以從命令行調用Rscript myscript.r 1 2 3並獲取

Loading required package: ...
...
[1] "1" "2" "3"
 chr[1:3] "1" "2" "3"
NULL

F:\Temp

這使您可以將帶有數組的文本文件的名稱傳遞給 Rscript。 如果我結合不同的語言,我通常使用文本文件來保存中間結果,這會讓事情變得更順暢一些。

請注意,如果您使用 Rscript 的任何選項(例如 --no-save),則必須將它們放在腳本之前,例如Rscript --no-save myscript.r

你不能把這些東西(嗯,不容易)傳遞給Rscript Rscript-e選項,其中可以有多個,它們是 R 表達式。 因此,您可以讓 PHP 生成一個字符串,該字符串是創建數組的 R 表達式,並通過單獨的-e參數傳遞每個表達式以創建數組。

您還可以傳遞 R 函數commandArgs()可以獲取並提供給您的命令行參數。 請參閱 此處的示例,但您可能需要了解參數如何傳入並由 R 評估。

根據數組的大小,上述內容很可能沒有用。 在這種情況下,您將不得不尋找與 R 通信的其他方式,而不是通過Rscript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM