Saltar al contenido

Ejecutando scripts R desde VBA

Solución:

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

Tenga en cuenta que tenga cuidado con las ubicaciones de sus archivos y es posible que necesite declaraciones de Shell dim más explícitas … por ejemplo, reemplácelas con estas líneas en su 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)

donde, en Excel una celda con una referencia nombrada RhomeDir contiene texto

C:Program FilesRR-3.2.3binx64rscript y

MyRscript contiene texto C:/Documents/Rworkings/Rscripttest.s

teniendo en cuenta la barra invertida de Unix R y el sufijo .s o .r y VB reemplaza “” con “para dar corchetes dobles en la expresión de la ruta (más corchetes externos adicionales para denotar la cadena) Tampoco es una buena idea tener espacios en el nombre de archivo.

La sintaxis atenuada completa del comando de shell anterior se encontró al buscar el shell de VBA.

Pongo todo en una función que se puede llamar fácilmente. La salida es la salida shell.run, que es un número entero:

Función para ejecutar un script 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

Ejemplos de cómo llamar:

Sub Demo()
    Dim iEerrorCode As Integer
    iEerrorCode = Run_R_Script("C:Program FilesRR-3.4.4binx64rscript","C:IbosRWF_MetricsAbe.R")
End Sub

O

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *