我正在尝试使用VBA从Excel运行R脚本。理想情况下,我会使用.R(Rscript)名称来调用R并运行该进程,或者如果没有,则调用Rscript.exe并执行传递给它的文件名。
REXcel并不好,因为它需要一个32位版本的Excel(我在1989年没有工作)
我在(http://shashiasrblog.blogspot.co.uk/2013/10/vba-front-end-for-r.html)找到了一个完美的脚本,在适当的本地化后看起来像这样:
Sub RunRscript()
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
path = "C:\Users\Charles\SkyDrive\Documents\Development\G4H\Technical evaluation templates\Graphical analysis.R"
errorCode = shell.Run(path, style, waitTillComplete)
End Sub
这失败并显示消息
运行时错误' -2147024894(80070002)': 方法'运行'对象' IWshShell3'失败。
哪个告诉我什么都没有。我试过谷歌搜索错误信息但没有得到任何结果。
我已将PATH变量设置为包含R和Rscript所在的目录。
我怀疑它是直截了当的,但是缺少从Excel执行R的简单方法。
答案 0 :(得分:3)
您需要将Rscript添加到路径中,否则shell不知道要将文件发送到哪个程序。因此,修改路径为
path = "rscript C:\Users\Charles\SkyDrive\Documents\Development\G4H\Technical evaluation templates\Graphical analysis.R"
您可能必须提供rscript的填充路径,具体取决于该目录是否在您的搜索路径中。
答案 1 :(得分:0)
我不确定这是否是正确的协议(毫无疑问,我会受到一些可怕的惩罚),但多亏了弗利克先生并且有些问题我有一个解决方案:
确保rscript.exe位于系统路径中。
尝试计算实际让Windows了解它是一个目录需要多少引号。
然后:
Dim shell As Object 设置shell = VBA.CreateObject(“WScript.Shell”) Dim waitTillComplete As Boolean:waitTillComplete = True Dim style As Integer:style = 1 Dim errorCode As Integer 昏暗的路径为字符串 path =“rscript”“C:\ Users \ Charles \ SkyDrive \ Documents \ Development \ G4H \ Technical evaluation templates \ Graphical analysis.R”“” errorCode = shell.Run(path,style,waitTillComplete)
在处理目录名称中的空格时,cmd的可怕解析最终屈服于暴力攻击!
答案 2 :(得分:0)
我遇到了同样的问题。更改代码以包含Rscript.exe和R文件的路径。以下代码对我有用:
UnityEngine.Event newEvent = new UnityEngine.Event()
newEvent.Screen.lockCursor = false;
//and
newEvent.Screen.lockCursor = true;