我目前正在开发一个连接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)
答案 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
最后,您将覆盖参数值var1
和var2
。删除第二个变量声明,以查看带有Excel数据的文本文件输出。