r - 如何将参数从 Excel/VBA 传递到 Rstudio 中的脚本
问题描述
我正在尝试使用 VBA 中的 Rstudio 打开一个 R 脚本,同时将一个参数传递给 R 脚本,然后我可以使用 commandArgs() 访问它。
该问题与此处描述的问题非常相似:
WScript.Shell 运行一个脚本,在路径中包含空格和来自 VBA 的参数
但是,该解决方案虽然非常好,但似乎对我不起作用。
这是我正在使用的 VBA 代码:
Sub RunRscript()
ActiveWorkbook.Save
Dim shell As Object
waitTillComplete As Boolean, _
style As Integer, _
errorcode As Integer, _
path As String, _
var1 As String
Set shell = VBA.CreateObject("WScript.Shell")
waitTillComplete = True
style = 1
var1 = Range("F3").Value
path = Chr(34) & "C:\Program Files\RStudio\bin\rstudio.exe" & Chr(34) & " " &
Chr(34) & "C:\Users\LI\Downloads\starting_code_v3.R"
'& Chr(34) & " " & Chr(34) & "var1" & Chr(34)
errorcode = shell.Run(path, style, waitTillComplete)
End Sub
如您所见,我使用的代码与上面提供的链接中的代码几乎相同,只是添加了一些内容。也就是说,我将 var1 定义为单元格 F3 的内容(在我的情况下,单元格包含文件的路径,但我想它可以是任何东西)。
现在,如果我按照上面介绍的方式运行代码,它就会工作,它会启动 RStudio 并打开脚本。但是,如果我将注释掉下面 1 行的代码添加到变量中(即,如果我尝试在传递参数 var1 的同时启动脚本),RStudio 会打开,但脚本不会,也没有传递任何值上。
任何建议都会有所帮助。
请注意,我在 stackoverflow 和 google 上查看了所有可能的类似主题,并尝试了大量的引号和双引号组合。(我对VBA不是很精通)。
另请注意:
- 运行Win7
- 运行 RStudio 1.1.383 和 R 3.4.2
- 我不想使用 cmd 或其他工具。这需要通过链接到 vba 代码的按钮从 excel 工作簿运行 - 因为它将被完整的新手使用。
- 我现在不想使用 RScript;也许我会在完成 RStudio 中的所有代码后考虑这一点。但是现在,我需要能够通过 commandArgs 读取 RStudio 中的参数并进行一些操作。
考虑到上述情况,请尽可能提供您的建议。
我希望以上所有内容都有意义,否则请要求澄清。
先感谢您。
解决方案
编辑:
问题是 RStudio 而不是你的代码。RStudio 不接受命令行参数:
旧答案:
我看到的问题是您将文本“var1”放入路径而不是名为 var1 的变量的内容。我用堆叠的引号替换了您的 Chr(34),因为我更容易跟踪。如果这对您来说不太可读,我深表歉意。我测试了字符串,它确实将 Var1 的内容作为命令行参数提供。
尝试这个:
Option Explicit
Public Sub RunRscript()
ActiveWorkbook.Save
Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Long: style = 1
Dim errorcode As Long
Dim path As String
Dim var1 As String
var1 = ActiveSheet.Range("F3").Value
path = """C:\Program Files\RStudio\bin\rstudio.exe"" ""C:\Users\LI\Downloads\starting_code_v3.R"" """ & var1 & """"
errorcode = shell.Run(path, style, waitTillComplete)
End Sub
推荐阅读
- android - SharedElementTransition 有时会在最小化应用程序时出现异常
- c# - 将 R.NET 与 ASP.Net Core 结合使用
- octobercms - 无法在 10 月 CMS 中更新数据库
- ios - 为什么即使在 WKWebView 中设置 cookie 后 SSO 也不起作用?
- pandas - 将纪元时间戳列转换为纪元中每月的第一天
- java - Java - 如果属性包含在逗号分隔的字符串中,则删除所有元素
- html - 创建一个可重用的模板,可用于各种页面
- pharo - Pharo 不保存临时变量名
- google-apps-script - 谷歌脚本从字符串的日期转换不正确?
- c++ - 如何删除此代码的重复排列?