在 R6 类上定义括号 (`[`) 运算符

2024-04-11

这是不起作用的:

library(R6)

Foo = R6::R6Class(
    'Foo',
    public = list(
        X = NULL,
        metadata = NULL,
        initialize = function(X, metadata){
            self$X = X
            self$metadata = metadata
        },
        `[` = function(selection){
            subfoo = Foo$new(X = X[selection], 
                             metadata = self$metadata)
            return(subfoo)
        }
    )
)

具体来说,[方法是垃圾:

> X = matrix(1:8, ncol = 2)
> foo = Foo$new(X, 'blah blah')
> foo[1:2,]
Error in foo[1:2, ] : object of type 'environment' is not subsettable

想要的结果是foo[1:2,]将是一个类的对象Foo就像foo除了它的矩阵foo$X较小。有没有直接的方法来实现这个暴露[运营商直接面向用户?


我想迟到的答案总比没有好。问题是您正在注册可以像这样调用的方法

x$`[`(1:3)

而你想要

x[1:3]

以下将全部派发[ and [<-对所有 R6 对象正确调用(通过 S3)。

`[.R6` <- function(x, ...) x$`[`(...) 
`[<-.R6` <- function(x, ...) x$`[<-`(...) 

请注意,您不应该为[[方法,因为这些方法已经被定义和使用,因为 R6 对象是环境。

理想情况下,如果(也可以被重写,以便我们可以创建函子对象(例如调用x(2)),但我不知道如何做到这一点..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R6 类上定义括号 (`[`) 运算符 的相关文章

随机推荐

  • 将 PDF 文档打印到 esc/pos 热敏打印机

    我们正在使用 xamarin forms 开发 POS APP 因为我们需要将收据打印到通过 LAN 连接的 esc pos 热敏打印机 我们的应用程序支持多语言 通过更改代码页使用 esc pos 命令打印多种语言效果非常好 但它仅适用于
  • 使用 JAX-RS 获取服务器的基本 url

    如何使用 JAX RS 获取服务器的基本 url 基本上 当程序位于本地主机上时 我想要 http localhost 8080 当程序位于实时服务器上时 我想要 http www theSite com 我正在使用泽西岛框架 是的 您可以
  • Firestore 每日配额

    我使用开发了一个示例应用程序Angular and 火库 我大约两个月前部署了我的应用程序 从那时起一直运行良好 然而 在上周 我注意到该应用程序在使用几个小时后因 客户端离线 错误而被阻止 我发现使用2个小时后我超出了每日的阅读操作限额
  • 在负载平衡的 Tornado 站点上使用 apache 基准测试获取失败的请求,但没有记录

    也许这是一个关于 ab 的问题 而不是关于 Tornado 的问题 但有些事情没有意义 我这样运行基准测试 ab n 100 http localdomainname 2 tornados being 1 nginx Concurrency
  • python 2 doctest 为何会失败,但失败消息中的值却没有差异?

    我在 Windows 中使用 Python 2 7 9 我有一个 UTF 8 编码的 python 脚本文件 其中包含以下内容 coding utf 8 def test func u gt gt gt test func u return
  • 以 RTL 格式格式化时 TextView 内的数字会反转

    里面的数字TextView以 RTL 格式格式化时会发生反转 当数字位于文本内的末尾时TextView他们逆转了 我怎样才能以编程方式解决这个问题 例如 下面的数字是相反的 它们应该显示为 误解 像 ARABIC 这样的 RTL 语言中的数
  • 如何解决对等依赖安装问题

    我正在尝试使用 npm 安装react contenteditable 但是 eslint 的对等依赖项不允许我安装以下错误的 risal 我正在使用 Ubuntu 18 04 LTS 操作系统 这是我用来安装react contented
  • 根据控制器指定不同的_Layout.cshtml

    我创建了一个 asp mvc3 项目 我想要根据选择的控制器有不同的 Layout cshtml 这是因为控制器 1 有 2 个按钮 控制器 2 有 3 个按钮 控制器 3 有 4 个按钮 每个控制器适用于特定类型的用户 因此取决于登录 我
  • Laravel 中的 Socket.io 轮询 404

    我正在尝试使用 Socket io 实现一个聊天应用程序 进入我的 Laravel 应用程序 聊天应用程序本身运行良好 但我在 Laravel 中遇到问题 我尝试在端口 8000 上提供 Laravel 服务 并在 8000 上提供聊天服务
  • 访问回调 user_is_anonymous 的反义词是什么?

    我知道在 drupal 模块中使用它来指定只有匿名用户才能看到该模块 仅指定登录用户的回调是什么 我有一个页面 我只想让登录用户访问 谢谢 它是用户 is logged in http api drupal org api function
  • 在 AVD 上运行自定义 ROM

    有谁知道是否可以在 AVD 上运行自定义 ROM 我该怎么做 谢谢 如果您自己构建自定义 rom 则在构建自定义 rom 后 您可以使用以下命令启动它emulator 但要做到这一点 你首先需要为模拟器构建 ROM 通常 full gene
  • 数据库结果的数组结构

    这可能是一个非常微不足道的问题 但是以下哪种方法是构造返回数据库结果的数组的最佳实践 比如说博客文章列表 对文章进行排序和分组 或者对元素进行排序和分组 Array title gt Array 0 gt Untitled 1 gt Unt
  • current_prolog_flag double_quotes DCG(代码或字符)?

    在使用 SWI Prolog DCG 时 我注意到有些人注意到 set prolog flag double quotes codes Jan http www swi prolog org pldoc man section string
  • 为什么正则表达式 ((x,y)|(x,z)) 是不确定的?

    为什么正则表达式 x y x z 像 Core Java 一书中所说的那样是不确定的 作者给出了他的观点 当解析器看到 x 时 它不知道采取两个替代方案中的哪一个 这个表达式可以以确定性形式重写为 x y z 谁能给我一个解释吗 为了具有确
  • Android 活动上下文为空

    所以我这里有这些代码 它运行时不会崩溃 但是 当我将 this 传递到网格适配器时 mContext 为空 我尝试传递 getApplicationContext 但仍然无法使 getImage 方法正常运行 因为 getResources
  • 我将如何获得 WPF Windows 应用程序的许可[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我开发了一个小型应用程序 我想尝试并销售它 但我不熟悉如何最好地做到这一点 我将如何锁定该程序以供试用1 我将如何处理接受付款 考虑到
  • SASS 或 LESS 关键帧百分比循环

    我正在测试一些特殊的东西 我正在尝试在关键帧内循环以动态地将百分比写入其中 我已经用 SASS 测试过类似的东西 但它不起作用 keyframes test for i from 0 through 100 i do special stu
  • Mercurial:保持两个分支同步但存在某些持久差异?

    我是一名使用 django 自己工作的 Web 开发人员 我正在尝试了解如何最好地使用 Mercurial 部署网站 我想要的是能够保留一个可用于生产和开发工作的存储库 生产 开发之间总会存在一些差异 例如 它们可能使用不同的数据库 开发总
  • docker 容器中的 Rails 应用程序在开发中不会重新加载

    我跟着这个docker compose 教程 https docs docker com compose rails 关于如何启动 Rails 应用程序 它运行完美 但当我更改控制器时 应用程序不会重新加载 还可以缺少什么吗 我也遇到了这个
  • 在 R6 类上定义括号 (`[`) 运算符

    这是不起作用的 library R6 Foo R6 R6Class Foo public list X NULL metadata NULL initialize function X metadata self X X self meta