我有一个问题,我需要通过命令行从php执行R脚本,并且需要为计算提供两个数组。
我运行以下命令来调用脚本:
Rscript nls.R ??? ???
我需要将我的数组 ??? 和 ??? 传递给 R,以便它计算某些值。
有人知道如何做到这一点吗?这不仅限于 php,因为它是命令行 - 我只需要知道是否可以通过命令行将数组传递给 R,以及如何传递。
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]]
$ 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进行评估和传递参数。
根据数组的大小,上述方法很可能无法使用。在这种情况下,您将不得不寻找与Rscript
通信的其他方式。