繁体   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