[英]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 腳本並包含對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.