【问题标题】:R: Vectorise setting active fields in R6R:矢量化在 R6 中设置活动字段
【发布时间】:2020-12-17 19:45:57
【问题描述】:

我有一个简单的 R6 对象生成器,带有一个 get/set 活动绑定:

myClass <- R6Class("myClass",
                   private = list(
                     ..status = TRUE
                   ),
                   active = list(
                     status = function(value) {
                       if (missing(value)) {
                         private$..status
                       } else private$..status <- value
                     }
                   )
)

我可以创建一个对象列表,使用myClass 生成:

class_list <- map(1:10, ~ myClass$new())

我可以得到列表中每个对象的status,使用purrr:: map:

map(class_list, ~ .x$status)

但是如果我想设置class_list 中所有对象的status 怎么办?我想用purrr:: walk 做到这一点:

walk(class_list, ~ .x$status <- FALSE)

这会抛出一个Error: unexpected [symbol]...,就像使用=一样。

谁能提供解决方案?最好使用purrr。

谢谢!

【问题讨论】:

    标签: r vectorization purrr r6


    【解决方案1】:

    我们可以将这些赋值封装在 {} 中并返回原始对象 (.x)

    map(class_list, ~ {.x$status <- FALSE; .x})
    

    现在,再次检查status

    map_lgl(class_list, ~ .x$status)
    #[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    

    【讨论】:

    • 太棒了,我必须等待接受这个,但我会的。谢谢!
    猜你喜欢
    • 2016-05-30
    • 2018-10-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多