Запуск R скриптов из VBA

Как запустить R script из VBA? Скажем, у меня есть R script, который хранится как C:\XXX\testR.R

Я пробовал использовать Shell, но не совсем успешно.

Ответ 1

Public Sub RunRTest()
  Shell ("Rscript test.r")
End Sub

Ответ 2

Обратите внимание, что будьте осторожны с вашими местами расположения файлов и, возможно, понадобятся более явные операторы Shell dim.... например, замените эти строки в вашем VB

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 = """" & Cells.Range("RhomeDir") & """ """ & Cells.Range("MyRscript") & """"

errorCode = shell.Run(path, style, waitTillComplete)

где в Excel ячейка с именованной ссылкой RhomeDir содержит текст

C:\Program Files\R\R-3.2.3\bin\x64\rscript и

MyRscript содержит текст C: /Documents/Rworkings/Rscripttest.s

отмечая обратную косую черту в Unix R и .s или .r postfix и VB заменяет "" на ", чтобы указать двойные скобки в выражении пути (плюс дополнительные внешние скобки для обозначения строки). Также не рекомендуется вставлять пробелы в имени файла.

Полный синтаксис dim указанной выше команды оболочки был найден при поиске оболочки VBA.

Ответ 3

Я помещаю все в функцию, которую можно легко вызвать. Выходные данные представляют собой выходные данные shell.run, которые являются целыми числами:

Функция для запуска скрипта R:

Function Run_R_Script(sRApplicationPath As String, _
                        sRFilePath As String, _
                        Optional iStyle As Integer = 1, _
                        Optional bWaitTillComplete As Boolean = True) As Integer

    Dim sPath As String
    Dim shell As Object

    'Define shell object
    Set shell = VBA.CreateObject("WScript.Shell")

    'Wrap the R path with double quotations
    sPath = """" & sRApplicationPath & """"
    sPath = sPath & " "
    sPath = sPath & sRFilePath

    Run_R_Script = shell.Run(sPath, iStyle, bWaitTillComplete)
End Function

Примеры как звонить:

Sub Demo()
    Dim iEerrorCode As Integer
    iEerrorCode = Run_R_Script("C:\Program Files\R\R-3.4.4\bin\x64\rscript","C:\Ibos\R\WF_Metrics\Abe.R")
End Sub

ИЛИ ЖЕ

Sub Demo()
    Dim iEerrorCode As Integer
    Dim WS as WorkSheet

    Set WS=ThisWorkBook.Worksheets("Sheet1")
    iEerrorCode = Run_R_Script(WS.Range("A1"),WS.Range("A2")) 'cell A1=adderess of R application and cell A2 is the address of your R file, one can use a named range too
End Sub

Ответ 4

Я пробовал все это. Я смог открыть R, но не запустить скрипт.

path = "" "" & Cells.Range("A1") & "" "" "" & Cells.Range("A2") & "" ""
где A1 = C:\Program Files\R\R-3.5.2\bin\x64\Rgui.exe
и A2 = d:\Документы\PC\POKUS_VBA\VBA_R_script.R

Я получил информацию: "ARGUMENT d:\Dokumenty\PC\POKUS_VBA\VBA_R_script.R" игнорируется

Я изменил\для/и многое другое, но безуспешно.

Кто-нибудь может объяснить мне, что я делаю неправильно? Благодарю. январь