【问题标题】:BERT R script, How does environment and scope work?BERT R 脚本,环境和范围如何工作?
【发布时间】:2018-09-23 01:16:50
【问题描述】:

我在理解 BERT 如何处理 R 环境时遇到了一些问题。理想情况下,我希望能够通过 VBA 运行 R 脚本,类似于 VBA Sub。我不认为 BERT 促进了这一点。

当我在 BERT 控制台中运行以下 R 脚本时:

controls_sheet <- EXCEL$Application$get_Sheets()$get_Item('Sheet1')
some_vec <- 1:5
controls_sheet$get_Range('A1:A5')$put_Value(some_vec); # print results to sheet

行为符合我的预期,我在 Sheet1 的 A1:A5 范围内打印了从 1 到 5 的序列。

当我设置一个函数来执行相同的任务时,结果不会打印到工作表上。例如使用下面:

test_fun <- function(sheet = 'Sheet1'){
    controls_sheet <- EXCEL$Application$get_Sheets()$get_Item(sheet)
    some_vec2 <- 1:5
    controls_sheet$get_Range('A1:A5')$put_Value(some_vec2); # print results to sheet
} 

我的期望是,从 1 到 5 的序列将放置在我提供给函数的工作表的 A1:A5 范围内。在工作表 Sheet1 中的任何位置调用 =R.test_fun("Sheet1") 不会在 A1:A5 范围内产生任何输出。

有人可以告诉我如何运行类似于 VBA sub 的 R 脚本或创建不接受输入、运行脚本并将输出打印到工作表的函数。

【问题讨论】:

    标签: r excel environment-variables scoping bert-toolkit


    【解决方案1】:

    这实际上是一个上下文问题。无论您使用的是 COM 还是 Excel API,都无法从另一个单元格设置单元格值。

    不知道为什么你在 shell 中没有收到关于这个的错误。

    您需要从不同的上下文中执行此操作,例如从 BERT 控制台或可能从 VBA 函数:

    Sub x()
        Application.Run "BERT.Call.R", "test_fun", "Sheet1"
    End Sub
    

    【讨论】:

    • 谢谢@duncan。我仍然需要弄清楚事情是如何运作的。我们能够在同一张工作表中使用工作表范围和 R. 函数调用来更新图像,所以我认为该方法会相似。
    • 我不知道实际原因,但我的假设是不允许从另一个单元格更改一个单元格的值,因为它会破坏计算树,并可能引入循环依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多