【发布时间】:2019-12-06 14:17:36
【问题描述】:
我有一个运行良好的 R 脚本,其中一个变量被设置为:
Benchmark <- c("Bench1","Bench2","Bench3","Bench4","Bench5","Bench6")
Benchmark
[1] "Bench1" "Bench2" "Bench3" "Bench4" "Bench5" "Bench6"
稍后在代码中,如果其中一列在 Benchmark 中存在值,我会检查表:
CollStruc <- CollStruc[CollStruc$Designer %in% Benchmark,]
直到那里,没问题。这里的问题是我想从 VBA 调用 Rscript,这要归功于这段代码:
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
'Paramètres à passer à R
Dim CheminR As String, Benchmark As String
NbBench = WSExec.Range("C16").End(xlDown).Row - WSExec.Range("C16").Row
Benchmark = """" & WSExec.Range("C16").Value & """"
For i = 1 To NbBench
Benchmark = Benchmark & "," & """" & WSExec.Range("C16").Offset(i, 0).Value & """"
Next i
Dim path As String
path = "RScript \\Tagwalk-nas\public\R-Scripts\Brand_Equity-Benchmark-parameters.R " & Benchmark
errorCode = shell.Run(path, style, waitTillComplete)
我一直在 RScript 中传递参数,如下所示:
args <- commandArgs(trailingOnly=T)
Benchmark <- c(args[1])
这就是问题所在。我的 Benchmark 变量看起来不像我期望的那样,因此其余代码返回错误
基准 "1" "Bench1,Bench2,Bench3,Bench4,Bench5,Bench6"
你知道我怎样才能完成这项工作吗? 谢谢
编辑: 感谢亚当和冻糕的帮助。
在 VBA 中创建的变量 Benchmark 现在看起来像这样:
print.debug(Benchmark)
"Bench1,Bench2,Bench3,Bench4,Bench5,Bench6"
我已尝试按照 Adam 的建议使用 unlist,它似乎可以根据需要转换变量。 这是我在 R 中使用它时的变量:
str(Benchmark)
chr [1:6] "gucci" "louis-vuitton" "chanel" "christian-dior" "prada" "fendi"
这是sink() 提供的输出,我将str(Benchmark) 放入从VBA 执行的Rscript 中:
chr [1:6] "gucci" "louis-vuitton" "chanel" "christian-dior" "prada" ...
【问题讨论】:
标签: r vba shell parameters