我正在尝试在 VBA 中构建一个将在 R 中执行的脚本。我已经能够通过 VBA 的 shell 命令执行 R 脚本,但当我向代码添加参数时却无法执行此操作。
以下是我执行 R 的 VBA 代码:
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 path As String
Dim var1
Dim var2
Dim var3
var1 = Sheets("Command").Range("ticker").Value
var2 = Sheets("Command").Range("type").Value
var3 = Sheets("Command").Range("period").Value
path = "Rscript C:\Documents\RProjects\FA.R " & var1 & " " & var2 & " " & var3
errorCode = shell.Run(path, style, waitTillComplete)
以下是我在 R 中运行的代码:
setwd("C:/Documents/RProjects/WorkingLibrary")
library(quantmod)
args = commandArgs(trailingOnly=T)
var1 = as.character(args[1])
var2 = as.character(args[2])
var3 = as.character(args[3])
x = getFinancials(var1)
Data = viewFinancials(get(x), type=var2, period=var3)
write.csv(Data,'TestData.csv')
我知道这是失败的,因为 csv 文件没有保存下来,因此 R 没有提取任何数据。如果我不传递任何变量,而只是让 excel 运行一个 R 脚本,打印出“Hello World!”并保存 csv,这样就可以了。但是当我添加变量参数时它失败了。如果我在 R 脚本中对变量进行硬编码,则 csv 将起作用,因此我知道 R 代码是合理的,但在通过命令行传递时不会获取参数。
不知道问题出在VBA端还是R端。我所能确定的是问题出在:
1) 将参数传递给命令行
2) R 中参数的接受
3)两者的结合。
有什么想法吗?谢谢。
最佳答案
我是个白痴。我的路走错了。这段代码运行完美,并且像梦一样传递变量。如果有人想在类似项目中引用或使用此代码,您可以随意这样做。只要确保您有正确的文件路径即可:P
关于r - 通过命令提示符 Shell 将 VBA 转换为 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393004/