将数组从php通过命令行传递给R

时间:2011-08-04 14:43:04

标签: php r command-line-arguments s

我有一个问题,我正在通过命令行从php执行R脚本,我需要给它两个数组进行计算。

我通过运行来调用脚本:

Rscript nls.R ??? ???

???和???是我的数组,我需要“给”R,以便它计算某些值。

任何人都知道如何做到这一点?它不仅限于php,因为它是命令行 - 我只需要知道数组是否可以通过命令行传递给R以及如何。

R怎么会抓住它,用什么命令?

非常感谢。

此致

4 个答案:

答案 0 :(得分:4)

您要查找的命令是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

答案 1 :(得分:4)

假设你想在服务网页的过程中运行R,有一些比命令行更好的方法来调用R;问题是R解释器启动速度很慢,而且你浪费了大量的时间和CPU能力来反复启动它。

例如,您可以使用triggr创建一个小型R服务器,并使用由PHP套接字构建的客户端与之通信。 更简单但更重的想法是创建一个rApache应用程序,并与CURL对话或直接将其用作AJAX甚至HTML提供程序。

答案 2 :(得分:3)

您必须调整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

答案 3 :(得分:2)

你不能把这些事情(好吧,不容易)传递给RscriptRscript具有-e选项,其中可以有多个选项,即R表达式。所以你可以让PHP生成一个字符串,它是一个创建数组的R表达式,并传递每个表达式以通过单独的-e参数创建一个数组。

您还可以传入R函数commandArgs()可以获取的命令行参数,并为您提供。请参阅示例here,但您可能必须讨论如何传递参数并由R进行评估。

根据数组的大小,上述情况可能不会有用。在这种情况下,您必须查看与R通信的其他方式,而不是通过Rscript