我有一個問題,即通過命令行從php執行R腳本,我需要給它兩個數組進行計算。通過命令行從PHP傳遞數組到R
我通過運行調用腳本:
Rscript nls.R ??? ???
???和?是我需要「給」R的數組,以便它計算某些值。
任何人都知道如何做到這一點?它不僅限於php,因爲它是命令行 - 我只需要知道一個數組是否可以通過命令行傳遞給R以及如何。
R怎麼會抓住它,用什麼命令?
非常感謝。
問候
我有一個問題,即通過命令行從php執行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中對它們進行了重新整理。謝謝大家! – Nemanja
你不能這樣的事情(當然,不容易)傳遞給Rscript
。 Rscript
有-e
選項,其中可以有多個,即R表達式。因此,您可以讓PHP生成一個字符串,該字符串是創建數組的R表達式,並傳遞每個表達式以通過單獨的-e
參數創建一個數組。
您還可以傳遞R功能commandArgs()
可以抓取並提供給您的命令行參數。看到一個例子here,但是你可能需要弄清楚參數是如何通過並由R進行評估的。
根據數組的大小,上面這些可能不會有用。在這種情況下,您將不得不查看與R通信的其他方式,而不是通過Rscript
。
很難將-e選項與您自己的腳本結合使用。使用-e設置工作目錄並找到腳本並不是那麼簡單的... –
您必須修改您的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保存),你有腳本之前把它們,例如Rscript --no-save myscript.r
注意:根據您如何從PHP執行Rscript,如果傳遞的參數來自Web用戶,請注意安全漏洞。 – Spacedman