[英]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.