Excel VBA和R:批处理模式vs交互模式



我能够通过Excel VBA以批处理模式执行R,使用下面的代码,但这种方法限制了交互性,因为R在脚本完成后关闭。我希望能够根据Excel用户输入进一步调用R,同时利用在第一次调用中创建的R对象。是否有一种方法来保持R活跃,同时仍然利用VBA发送消息给R?

Sub Run_R()
Dim shell As Object, Rcmd As String, retval As Variant
Set shell = VBA.CreateObject("WScript.Shell")
Rcmd = "Rscript C:test.R"
retval = shell.Run(Rcmd, 0, True)
End Sub

考虑将两个进程分段。让Excel VBA通过电子表格或用户表单获取所有需要的用户输入值,然后将其传递到R脚本中。R读取诸如命令行参数之类的值,用于更长的操作例程。

在这里,R是作为子进程在应用程序中生成的,类似于一个单独的宏或函数,它接收输入参数并处理输出:

VBA

Sub Run_R()
    Dim shell As Object, Rcmd As String, retval As Variant
    Dim var1, var2 As Double
    var1 = Range("A2").Value
    var2 = Range("A5").Value
    Set shell = VBA.CreateObject("WScript.Shell")
    Rcmd = "Rscript C:test.R " & var1 & " " & var2
    retval = shell.Run(Rcmd, 0, True)
End Sub

R

args <- commandArgs(trailingOnly=T)
var1 <- args[1]
var2 <- args[2]
# ... run other operations ...

最新更新