r - 对从批处理文件运行 R 与直接从 shell 运行 R 之间的区别感到困惑
问题描述
我最近遇到了一个奇怪的错误,虽然我设法修复了它,但我一生都无法弄清楚幕后出了什么问题,我想了解发生了什么。我目前正在编写一个程序,它接受 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 运行它),因此很难调试。任何调试这些类型问题的提示或建议也将不胜感激。谢谢!
解决方案
我认为你对 RScript 的 PATH 有一个问题,以防万一:它在双批处理调用中丢失了。
推荐阅读
- python - Matplotlib 极坐标散点图不显示所有点
- sql - 在 SQL Server 中获取 0.00 十进制值
- wordpress - 如何在 Wordpress 中设置现有产品属性的值?
- c++ - 如何检查已经存在的#include 文件
- android - workmanager 定期请求在没有设置弹性周期的情况下不起作用
- typescript - 如何设置没有值的数字类型变量
- android - 在 Google Play 控制台上更新应用时出现错误
- substrate - 如何检查“墨水”的“储值”!在最新的“Polkadot/Substrate Portal”中
- android - ARCore Baisc 应用程序崩溃
- cassandra - 为高速查询构建 Cassandra 表