将变量从VBA传递到R脚本

3
我目前正在开发一个连接R和Excel的接口。到目前为止,我已经能够通过VBA宏执行R程序。我使用了http://shashiasrblog.blogspot.fr/2013/10/vba-front-end-for-r.html上提供的建议。
由于我的R脚本调用外部txt文件,当更改相应文件的目录时,最好不要手动更改R代码。所以问题是,是否可能从VBA脚本中将变量分配给R
我没有成功地在指定的网站上找到帮助。有人遇到过这个问题并知道如何解决吗?您可以在附加的代码示例中找到我试图从该网站进行适应的内容。
问候,
大卫
 Sub RunRscript()
'runs an external R code through Shell
'The location of the RScript is 'C:\R_code'
'The script name is 'hello.R'
Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
Dim var1, var2 As Double
var1 = Tabelle1.Range("D5").Value
var2 = Tabelle1.Range("F5").Value

Dim path As String
path = "RScript C:\Users\David\Desktop\Test\test.R" & var1 & " " & var2

errorCode = shell.Run(path, style, waitTillComplete)

End Sub



args<-commandArgs(trailingOnly=T)
# cat(paste(args,collapse="\n"))
sink('C:/Users/David/Desktop/Test/test.R',append=F,type="output")

var1<-as.numeric(args[1])
var2<-as.numeric(args[2])

var1<-5
var2<-2
a<-var1+var2
write.table(a, file = "C:/Users/David/Desktop/bla.txt", sep = ",", col.names = NA,
            qmethod = "double")
sink(NULL)
1个回答

1
几乎完成了。首先,您不需要sink()行,因为您没有写入任何文本文件,当然也不会写入用于传递参数的R脚本。如果您在链接中看到,文本文件正在使用sink()cat()创建并更新。只需在您的R代码中删除该对即可,因为您不执行相同操作。我相信您已经意识到,代码底部应该在引用的test.R脚本中,而不是在VBA中。

其次,您需要在文件指定后将路径字符串添加一个空格:

path = "RScript C:\Users\David\Desktop\Test\test.R " & var1 & " " & var2

或者

path = "RScript C:\Users\David\Desktop\Test\test.R" & " " & var1 & " " & var2

最后,您将覆盖参数值var1var2。删除变量的第二个声明,以查看带有Excel数据的文本文件输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接