我最近遇到了一个奇怪的错误,尽管设法解决了这个问题,但我终生无法弄清楚幕后到底出了什么问题,我想了解发生了什么。我目前正在编写一个程序,该程序接受Excel输入,并使用它们来指导用R编写的程序,最终吐出结果并反馈给Excel以供用户查看。
我最初的解决方案使用了一个由一行组成的批处理文件,调用:
Rscript "Rfilepath.R"
是使用以下方法从VBA调用的:
Dim wsh As Object
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim windowstyle As Integer: windowstyle = 1
wsh.Run Chr(34) & BatchFilePath & Chr(34), windowstyle, waitOnReturn
但是,这证明无法运行以下R代码(极其简化):
library(ggplot2)
library(gridExtra)
library(ggpubr)
x <- seq(1,10)
y <- seq(11,20)
z <- seq(6,15)
a <- ggplot(data.frame(cbind(x,y)),aes(x=x,y=y))+geom_point()
b <- ggplot(data.frame(cbind(y,z)),aes(x=y,y=z))+geom_point()
c <- ggplot(data.frame(cbind(x,z)),aes(x=x,y=z))+geom_point()
test <- ggarrange(ggarrange(a,b,nrow=2),c,ncol=2)
ggsave(file="filepath.png",plot=test)
调用ggarrange函数时导致了问题。但是,通过在VBA中执行以下操作(基本上可以删除批处理文件步骤),我能够解决这种情况:
Set wsh = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
errorCode = wsh.Run("Rscript " & Chr(34) & RPath & Chr(34), style, waitTillComplete)
这两种方法之间有何区别?为什么一种方法起作用而另一种却不起作用?由于批处理终端由于错误立即关闭(可能是由于从VBA运行它)而导致调试困难。调试此类问题的任何提示或建议也将不胜感激。谢谢!
答案 0 :(得分:0)
在一种情况下,我认为您对RScript的PATH有问题:在双重批处理调用中它丢失了。