我试图在VBA中调用我创建的R函数时遇到问题。问题不是来自VBA和R之间的连接,但是当我的R代码必须调用我自己的函数时,程序就会停止。为了更清楚,这里是R代码:
args = commandArgs(trailingOnly=T)
sink('Y:/Documents/BC10.txt', append=F, type = "output",split=TRUE)
source("Y:/Documents/myfunction.R")
cat('TEST !!')
simul = args[1]
level = args[2]
spd1 = args[3]
spd2 = args[4]
spd3 = args[5]
date_valo = toString(args[6])
swap_rate = args[7]
l1 = 0
u1 = 0.03
rho2 = 0.5
cat('\nparameters are: ', simul, level, spd1 , spd2, spd3, date_valo, swap_rate)
PV_eq=PV_eq=myfunction(l1,u1,spd1,rho2,simul,level, date_valo, swap_rate)
cat(PV_eq)
sink()
当我运行我的VBA代码时,程序在文本文件“BC10.txt”中显示参数时表现良好,但它不显示PV_eq。所以,我认为该程序无法调用我的用户定义函数“myfunction”。
有没有人知道我遇到的问题?也许,我必须在我的VBA代码(或R代码)中添加一些内容,以便VBA考虑用户定义的函数?
答案 0 :(得分:0)
感谢您的回答。
我不认为问题来自我的R代码,因为当我运行函数" myfuntion"在R中,它有效。
我正在使用Rexcel来执行我的R代码。这是VBA代码:
Sub Compute_BC()
Dim shell As Object 设置shell = VBA.CreateObject(" WScript.Shell") Dim waitTillComplete As Boolean:waitTillComplete = True Dim style As Integer:style = 1 Dim errorCode As Integer Dim path As String
Dim simul, level As Variant
Dim spd1, spd2, spd3, swap_rate As Variant
Dim date_valo As String
simul = BC.Range(" B6")。值
level = BC.Range(" B4")。值
spd1 = BC.Range(" B13")。值
spd2 = BC.Range(" C13")。值
spd3 = BC.Range(" D13")。值
date_valo = BC.Range(" B1")。值
swap_rate = BC.Range(" B5")。值
path ="""" &安培; Cells.Range(" RhomeDir")& """ """ &安培; Cells.Range(" MyRscript")& """" &安培; " " &安培; simul& " " &安培;水平& " " &安培; spd1& " " &安培; spd2& " " &安培; spd3& " " &安培; date_valo& " " &安培; swap_rate
errorCode = shell.Run(path,style,waitTillComplete)
End Sub
Rmq:我用一个简单的R文件测试了这个VBA代码,并且它有效。问题出现在我的R文件中,有一个我定义的函数的调用。