在 R 包中将非 S3 基本函数重新定义为 S3 函数是一种不好的风格吗?

2023-11-24

所以我正在开发一个使用 S3 类的 R 包,如果我可以使用sample作为我的一门课的方法。然而,base已经声明了sample作为一个非S3功能,所以我想知道的是:

重新定义非S3是不是不好的风格base函数如sample作为 S3 功能?这会给我的包的用户带来麻烦吗?

一种你可以重新定义的方式sample并且仍然保留base功能工作是:

sample.default <- base::sample
sample <- function(x, ...) {
  UseMethod("sample")
}
# This allows me to define a new sample method for my_special_class
sample.my_special_class <- function(...) {...}

但我不确定这是否会导致任何麻烦或命名空间问题,例如在加载其他包时。我还注意到没有多少包重新定义sample,例如 dplyr 使用sample_n和 igraph 使用sample_,我想这可能有一些原因......


“风格”是否不好主要取决于观点。但是编写 R 扩展,第 7.1 节 - 添加新的泛型告诉您如何添加新的泛型来掩盖基本基本/推荐函数。也就是说,您提出的解决方案在该部分中被明确警告:

...包可以接管基础包中的功能并通过类似的方法使其通用

 foo <- function(object, ...) UseMethod("foo")
 foo.default <- function(object, ...) base::foo(object)

本手册的早期版本建议分配foo.default <- base::foo。这不是一个好主意,因为它在安装时捕获了基本功能,并且可能会随着 R 的修补或更新而更改。

其他人可能遇到的一个问题是另一个包是否也注册了summary作为通用。然后,根据您的包或其他包需要决定使用哪个泛型来注册其方法。

没有多少包重新定义sample因为屏蔽基本/推荐函数通常不是一个好主意。这使得用户有可能根据您的包是否加载而在顶层获得不同的行为。

您肯定要避免的一件事是在基本/推荐(或高度使用)包中屏蔽泛型。这样做会阻止顶层的方法分派,从而给希望泛型工作的用户带来麻烦(例如dplyr::lag).

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

在 R 包中将非 S3 基本函数重新定义为 S3 函数是一种不好的风格吗? 的相关文章

  • 从 R 中的向量中选择所有可能的元组

    我正在尝试用 R 编写一个程序 当给定一个向量时 将返回所有可能的tuples http en wikipedia org wiki Tuples该向量中的元素 例如 元组 c a b c c a b c 出租车 c a c c b c c
  • R::bigmemory - 如何创建角色big.matrix?

    我尝试使用bigmemory封装在R我一开始就陷入困境 我愿意 temp lt matrix paste a 1 10 5 2 并得到一个字符矩阵 没关系 但后来我尝试 x lt as big matrix temp type char 我
  • 返回数据帧 R 中的下一行

    我有一个看起来像这样的数据框 kind datetime book 2016 04 23 04 23 00 pen 2016 04 23 04 30 00 toy 2016 04 23 06 45 00 我想为数据集中的每一行返回下一行的日
  • 基于另一个数据集获取数据集的子集

    假设我有一个数据集 即 dat1 ID block plot SPID TotHeight 1 1 1 4 44 5 2 1 1 4 51 3 1 1 4 28 7 4 1 1 4 24 5 5 1 1 4 27 3 6 1 1 4 20
  • R 中具有稳健回归的异常值

    我正在使用lmrobR 中的函数使用robustbase用于稳健回归的库 我会把它用作 rob reg lt lmrob y 0 dat method MM control a1 当我想返回我使用的摘要时summary rob reg 稳健
  • 计算例如具有多列 data.frames 的列表中的平均值

    我有几个 data frames 的列表 每个 data frame 有几列 通过使用mean mylist first dataframe a我可以得到这个 data frame 中 a 的平均值 但是我不知道如何计算列表中存储的所有 d
  • LDA with topicmodels,如何查看不同文档属于哪些主题?

    我正在使用 topicmodels 包中的 LDA 我已经在大约 30 000 个文档上运行它 获取了 30 个主题 并获得了主题的前 10 个单词 它们看起来非常好 但我想看看哪些文档属于哪个主题的概率最高 我该怎么做 myCorpus
  • kableExtra 中的 row_spec() 函数不会在 html 输出中创建水平线

    我想在 kableextra 表中的某一行下方添加一条水平线 row spec 函数的参数 hline after 应该在行下方添加水平线 row spec 文档 https www rdocumentation org packages
  • 使用 broom 和 tidyverse 总结 r 平方游戏

    我发布了一个问题here https stackoverflow com questions 48627287 getting adjusted r squared value for each line in a geom smooth
  • 删除ggplot2中的负图区域[重复]

    这个问题在这里已经有答案了 如何删除 ggplot2 中 x 轴和 y 轴下方的绘图区域 请参见下面的示例 我尝试了几个主题元素 panel border panel margin plot margin 但没有任何运气 p lt ggpl
  • 如何用外部图像填充地图边界?

    我正在创建一张带有州边界的巴西地图 这可以直接使用ggplot2 and geom sf 然而 这一次 我不想用数据填充每个状态的颜色 而是想用外部图像 png 填充每个状态的边界 类似于this https online olivet e
  • 如何计算R中移动窗口内的平均斜率

    我的数据集包含2个变量y 和 t 05s y 每 05 秒测量一次 我正在尝试计算移动中的平均坡度20秒窗口 即计算第一个 20 秒斜率值后 窗口向前移动一个时间单位 05 秒 并计算下一个 20 秒窗口 在以下位置生成连续 20 秒斜率值
  • 将绘图调用拆分为多个块

    我正在编写一个图的解释 其中我基本上将在第一个块中创建图 然后描述该输出 并在第二个块中添加一个轴 然而 似乎每个块都会强制一个新的绘图环境 因此当我们尝试使用以下命令运行块时会出现错误axis独自的 观察 output html docu
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • twitterR 和 ROAuth R 软件包安装

    我在安装 CRAN 上的 twitteR 和 RAOuth 软件包时遇到一些问题 我尝试了几种不同的方法 在 Windows 下使用源代码 在 Ubuntu 下使用 RStudio 我尝试了以下命令 sudo apt get install
  • 朴素贝叶斯分类器仅基于先验概率做出决策

    我试图根据推文的情绪将推文分为三类 买入 持有 卖出 我正在使用 R 和包 e1071 我有两个数据框 一个训练集和一组需要预测情绪的新推文 训练集数据框 text sentiment this stock is a good buy Bu
  • 基于时间窗口的不规则时间序列的优化滚动函数

    有没有办法使用 rollapply 来自zoo包或类似的东西 优化功能 rollmean rollmedian等 使用基于时间的窗口计算滚动函数 而不是基于大量观察的函数 我想要的很简单 对于不规则时间序列中的每个元素 我想计算一个具有 N
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定

随机推荐

  • 如何利用纬度/经度数据进行有效的范围搜索+计数?

    我正在处理由纬度 经度对表示的大量点 这些点不一定是唯一的 该集中可能有多个点位于同一位置 这些点存储在数据库中 我需要做的是找出一种有效执行搜索的方法 以获取任意点给定半径 例如 25 英里 内的点数 计数不需要 100 准确 更重要的是
  • 如何编写全屏 Linux 控制台应用程序/脚本?

    我什至很难用谷歌搜索这个 因为我不知道正确的关键字 一些命令行应用程序 例如 vi 和 less 接管整个控制台屏幕并向用户呈现交互式界面 退出此类应用程序后 屏幕将返回到应用程序启动之前的状态 我想编写一个以这种方式运行的程序 但同样 我
  • 在半尺寸父控制器中呈现模态视图控制器

    我试图在大小为一半父视图控制器的其他视图控制器上呈现模态视图控制器 但它始终以全屏视图显示 我在故事板中创建了具有固定帧大小的自由大小的视图控制器 320 250 var storyboard UIStoryboard name Main
  • 如何确定旅行商问题的起点和终点?

    我有一个求解器可以解决正常的对称 TSP 问题 该解决方案意味着经过所有节点的最短路径 并且不限制哪些节点是路径中的第一个和最后一个节点 有没有办法转化问题 保证一个特定的节点作为起始节点 另一个节点作为结束节点 一种方法是将 I 非常大的
  • 在 Dask DataFrame.apply() 上,在处理实际行之前接收 n 行值 1

    在下面的代码片段中 我希望日志打印数字 0 4 我知道数字可能不是按这个顺序 因为任务将被分解为多个并行操作 代码片段 from dask import dataframe as dd import numpy as np import p
  • 使用 Hyper 显示响应正文仅显示正文的大小

    我尝试使用 Hyper 将 URL 的内容 正文 显示为文本 extern crate hyper use hyper client Client use std io Read fn main let client Client new
  • PostgreSQL 将数据库存储在哪里?

    PostgreSQL 数据库的文件存储在哪里 要查看数据目录所在的位置 请使用此查询 show data directory 要查看所有运行时参数 请使用 show all 您可以创建表空间来在文件系统的其他部分存储数据库对象 要查看可能不
  • 删除 Fetch API 默认超时

    我使用 Google Chrome 或 Mozilla Firefox 的本机获取向我的服务器发送查询 fetch url method POST body formData credentials include 我设置了一个服务器在 3
  • 在 ElasticSearch 中返回部分嵌套文档

    我想搜索嵌套文档数组并仅返回符合特定条件的文档 映射示例如下 book properties title type string chapters type nested properties title type string lengt
  • angularjs:只允许在文本框中输入数字

    在 AngularJS 中 是否有任何可用功能只允许在文本框中输入数字like 此代码显示了如何防止输入非数字符号的示例 angular module app directive onlyDigits function return res
  • 问:回调的调用顺序是否与注册的顺序相同?

    我正在使用Q承诺图书馆 我的代码依赖于这样一个事实 单个 Promise 的回调按照注册的顺序执行 http jsfiddle net HgYtK 1 var deferred Q defer var promise deferred pr
  • android:name 中的前导点真的需要吗? [复制]

    这个问题在这里已经有答案了 可能的重复 注册活动时的 点 是什么意思 在所有 Android 示例中 活动 服务等名称均以点开头
  • 查看设备方向是否已锁定(检测是否启用/禁用自动旋转)

    如何查明设备的屏幕方向是否已锁定 我正在使用 OrientationEventListener 来触发我的应用程序内的一些操作 如果用户锁定了屏幕 我想禁用这些操作 我知道我通常可以这样定位 但如何找出这个锁定方向 int orientat
  • 神秘的形式(function(x){})$x

    物体是什么formals function x x 它存在于函数的形式中 绑定到没有默认值的参数 还有其他方法来引用这个奇怪的对象吗 除了表示空函数参数之外 它还有其他作用吗 以下是可以在控制台中检查的一些属性 gt is formals
  • Android 和桌面上 Java 下的 SVG 处理

    我正在尝试编写一个基于 XML 文件生成 SVG 图像的 Java 应用程序 该应用程序还应该能够显示 SVG 文件 我的应用程序应该在 Android 平台和台式电脑上运行 我读到过有关 Swing Batik 的内容 但据我所知 它在
  • Objective-C 中自定义对象的分组

    我有 Person 类的自定义对象数组 Person NSObject NSString firstName NSString lastName NSString age NSMutableArray personsArray NSMuta
  • #在C中定义一个元组

    我希望能够定义一个元组来表示其他宏所需的参数 我认为展示我想要的最好方法是展示一个例子 include
  • 如何将 InMemoryUploadedFile 对象复制到磁盘

    我试图捕获通过表单发送的文件 并在保存之前对其执行一些操作 所以我需要在临时目录中创建该文件的副本 但我不知道如何访问它 Shutil 的函数无法复制该文件 因为没有该文件的路径 那么有没有办法以其他方式执行此操作 我的代码 image f
  • 在 Android 上使用客户端/服务器证书进行双向身份验证 SSL 套接字

    我正在开发一个需要客户端和服务器证书身份验证的 Android 应用程序 我创建了一个 SSLClient 类 该类在常规桌面 Java SE 6 上运行良好 我已将其移至我的 Android 项目中 但收到以下错误 未找到 KeyStor
  • 在 R 包中将非 S3 基本函数重新定义为 S3 函数是一种不好的风格吗?

    所以我正在开发一个使用 S3 类的 R 包 如果我可以使用sample作为我的一门课的方法 然而 base已经声明了sample作为一个非S3功能 所以我想知道的是 重新定义非S3是不是不好的风格base函数如sample作为 S3 功能