问题标签 [r-s3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
102 浏览

r - 来自不同包的具有相同名称的 R S4 类

假设有两个包。

Package_A 有这个类:

Package_B 有一个类似的类:

所以用户已经在他们的工作环境中加载了这两个包:

在这个用户的工作环境中,R 如何解决创建“Person”对象的困惑:

在此用户的工作环境中,R 如何解析调用正确的方法:

0 投票
1 回答
80 浏览

r - 如何将 S3 方法声明为默认加载环境?

在一个包中,我想为 object 调用一个 S3 方法“compact” foobar

因此compact.foobar,我的包中将有一个函数以及compact函数本身:

但是,后者会与purrr::compact.

我可以默认使用purrrcompact.default = purrr::compact或可能 compact.list = purrr::compact)的方法,但如果用户没有purrr加载,那将毫无意义。

compact如何在用户环境中将我的方法默认为加载的 , 版本?(以便它使用purrr::compact、任何其他声明compact的函数,或丢失函数失败)

0 投票
0 回答
570 浏览

r - 来自导入包的“已覆盖注册的 S3 方法”消息

每当我加载我的包裹时,我都会收到以下消息:

事实上,我使用了这两个函数expssHmisc我的包中的函数。以下是 NAMESPACE 中的相关行:

但是,没有导入任何 S3 方法。

我使用 RStudio,NAMESPACE 是由roxygen2. 我没有声明与这些函数相关的其他 S3 方法。

我知道我只能使用一个包,但这不是我要问的(我不明白这个问题可能意味着更深层次的问题,我想保持与两个包的兼容性)。

此外,我想知道提到的事实print.labelled是否意味着我的包裹中有打印参考,这将是非常出乎意料的。(Ctrl+ Shift+ Fonprint仅指向示例或小插曲)

如果我什至不首先导入它们,为什么这些方法会被覆盖?

0 投票
1 回答
84 浏览

r - R中用于继承自定义数据框类的列的函数

我有一个数据框列表

并编写了一个函数来为每个数据框附加一个自定义类:

有用!

但现在我想使用类继承让每个数据框中的列分别继承foobarcustom类 - 我该怎么做?

期望的输出

我对使用 S3 非常陌生,因此不胜感激!

0 投票
1 回答
53 浏览

r - 方法分派时 UseMethod 出错

我尝试使用以下代码创建一个方法,但是当我使用名为“tutu”的通用函数时,我收到以下错误,而其他函数(tutu.num 和 tutu.ch)工作。请你能帮我理解错误在哪里吗?我希望“tutu”函数能够识别该类并使用示例中为 tutu.num 的函数的适当方法。谢谢!

UseMethod(“tutu”)中的错误:没有适用于“tutu”的方法应用于类“c('integer','numeric')”的对象

0 投票
1 回答
229 浏览

r - 创建从数据框继承的 S4 类

我正在写一个 R 包。在这个包中,我希望有一种特殊类型的数据框,一些函数可以识别它,具有一些额外的属性,比如说,但在其他方面表现得与数据框完全一样。实现我想要的一种方法就是在常规数据框上设置一些属性:

dosmth()接收到“myDF”时,它有关于数据帧来源的附加信息:

同样,使用 S3 会相当简单,我们甚至可以利用方法分派编写不同的 dosmth 变体。我如何用 S4 做到这一点?

0 投票
0 回答
27 浏览

roxygen2 - 如何扩展包的 S3 方法的文档?

在我的包中,我as_bar从包中扩展了一个 S3 方法pcp_pack,应用于foo我的包中的一个对象foo_pack

ROxygen2 文档如下:

但是,这个功能是相当独立的,它可以在没有原始包的情况下工作。但是为了让函数在不必运行的情况下工作library(pcp_pack),我必须重新导出通用方法(我从dplyr reexportmagrittr复制了重新导出的语法),所以 R 知道它应该调用一个方法:

这完美地工作,并且as_bar适用于foo对象以及其他对象。

但是,文档并不完美,运行library(foo_pack);?as_bar会给出两个结果:

  • man of ,用法中pcp_pack::as_bar未提及as_bar.foo
  • man of foo_pack::as_bar, with as_bar.fooin the usage 但没有别的

提前运行library(pcp_pack)不会改变任何事情。

我怎样才能得到一个统一的版本?as_bar,所有加载的包的所有用法,无论它们是什么?

编辑

0 投票
2 回答
65 浏览

r - R中数据框中每个元素的自定义类

我对 S3 很陌生,想知道是否有可能给出以下数据框:

我可以给列中的每个元素elements一个来自 S3 列的自定义类:

但这不起作用。这是由于我对 S3 的理解存在心理模型差距吗?是否可以以这种方式对每个元素应用不同的类,如果不能,可以以某种方式将输出创建为列表,以便列表中的每个元素都是一个elementwith class S3?任何提示/帮助建议表示赞赏!

0 投票
2 回答
603 浏览

r - 在 R 包中定义 S3 方法而不引入依赖项的首选方法是什么?

我有一个 R 包(目前不在 CRAN 上),它定义了一些来自其他包(特别是knitr::knit_printhuxtable::as_huxtable)的通用函数的 S3 方法。但是,它们不是我的包的关键部分,所以我不想在用户安装我的包时创建对这些包的依赖。直到 R 4.0.0,我导出了 S3 方法而不导入泛型。使用roxygen2,我的@export指令被翻译成export()NAMESPACE 中的指令,而不是S3method(). 这在 R 版本 < 4.0.0 中运行良好,因为 Rgeneric_function.class首先在全局环境中查找匹配方法,而不是依赖于 S3 方法的正确注册。但是,根据developer.r-project.org 上的这篇博客,R 不再寻找未注册的 S3 方法。

解决这个问题的最好方法是什么?现在,我已将@importFrom指令添加到我的roxygen2块中,并将两个包添加到说明的导入部分。但是,据我了解,这意味着任何安装我的软件包的用户也必须安装knitrhuxtable无论他们是否愿意。

0 投票
1 回答
68 浏览

r - S3中的美元建议方法

我现在正在制作一个 R 包,我必须在返回列表和具有 S3 属性的对象之间进行选择。至于列表,好处是对于初学者来说非常容易使用,因为美元符号使所有元素都易于找到。不好的是,它消除了直接继承(我想返回一个带有一些附加信息的 ts 对象)。

另一种方法是为我的 S3 课程设置美元,如下例所示:

但是,我对此有两个问题:

  • 在哪里设置美元部分匹配功能,以便用户在 rstudio 中将“MyAttribute”视为有效选择?
  • 此外,这是一个很好的做法还是我应该继续使用简单的列表

谢谢