将变量从VBA传递到R脚本

时间:2015-06-07 22:05:12

标签: r vba interface

我目前正在开发一个连接R和Excel的接口。我现在能够通过VBA宏执行R程序。 我使用了给出的建议 http://shashiasrblog.blogspot.fr/2013/10/vba-front-end-for-r.html

由于我的R-Script调用外部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 个答案:

答案 0 :(得分:1)

几乎就在那里。首先,您不需要sink()行,因为您没有写入任何文本文件,当然也不需要用于传递参数的R脚本。如果您在链接中看到,则会使用sink()cat()创建并更新文本文件。只需在R代码中删除该对,因为您不这样做。我确定您知道代码的底部应该在引用的test.R脚本中,而不是在VBA中。

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

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

OR

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

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