在Excel中运行R脚本

s4n0splo  于 2023-05-23  发布在  其他
关注(0)|答案(3)|浏览(150)

没有太多关于如何做到这一点的信息。我试着在网上研究了一个博客,并在VBA中实现了以下代码(带有R文件的路径):

Sub RunRscript()
    'runs an external R code through Shell
    'The location of the RScript is 'C:\R_code'
    'The script name is 'hello.R'

    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 = "RScript C:\R_code\hello.R"
    errorCode = shell.Run(path, style, waitTillComplete)
End Sub

Source
但是,当我在Excel中运行宏时,它基本上什么也不做-只是在RStudio中打开脚本。我没有得到任何错误,但它没有给出任何输出-只是在Rstudio中打开R脚本。我做错了什么?
另外,如果我需要在Excel中使用R,这种方法是否有效,或者基本上我需要安装软件RExcel?
任何其他在Excel中使用R的链接/信息将不胜感激。Thanks:)

pnwntuvh

pnwntuvh1#

它在RStudio中打开似乎很奇怪。我建议直接通过R.exe运行它。从你告诉我们的情况来看,PATH设置得很正确。因此,如果不需要输出,可以像这样调用R.exe:

Sub RunRscript()
    Shell ("R CMD BATCH C:\R_code\hello.R")
End Sub

如果你需要输出,那么你需要像这样创建一个WshShell对象:

Sub RunRscript()
    Dim output As String
    output = CreateObject("WScript.Shell").Exec("R CMD BATCH C:\R_code\hello.R").StdOut.ReadAll
End Sub

这是运行R脚本的旧方法,但目前应该可以正常工作。您可能需要进一步检查R的安装,看看是否存在其他问题。

5rgfhyps

5rgfhyps2#

我和你有同样的问题,但“R CMD BATCH”解决方案不适合我。这就是我的工作。
首先,我测试了是否可以通过命令行运行R脚本来排除任何问题。
打开命令提示符,并尝试在“>”符号后键入“path Rscript.exe”“您要运行的R脚本的路径”。在我的例子中,我键入“C:\Program Files\R\R-3.6.0\bin\Rscript.exe”“C:\Users\phung\Documents\Angela\DB_Import\TransformData.R”,然后按回车键运行代码。例如,请参见下面的图像。您需要导航到C程序文件>R>版本>bin以找到Rscript.exe(可能是计算机上的不同路径)。

一旦我得到了这个工作,我使用了Ibo提供的代码:Running R scripts from VBA

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 Run_R 
        Dim iEerrorCode As Integer

        iEerrorCode = Run_R_Script("C:\Program Files\R\R-3.6.0\bin\Rscript.exe", """C:\Users\phung\Documents\Angela\1_MR-100 project\DB ready VBA code\TransformData.R""")
   End Sub

我很小心地在VBA中使用双引号,因为我的文件夹名称中有一个空格。

xjreopfe

xjreopfe3#

前面的答案是正确的,但原因如下。用于WScript.shell的路径是执行的路径。这类似于在文件资源管理器中双击文件。
操作系统看到路径中的文件扩展名(.R)并说“我知道该怎么做!.R的默认应用程序是RStudio。所以它打开RStudio和指定的文件。

相关问题