我有一个包裹shinyjs
带有一个名为show
。今天,一位用户向我报告,这在使用 S4 对象时会带来问题,因为“打印”S4 对象使用show
方法,它在附加时被我的包屏蔽。
Example:
library(shinyjs)
setClass("testS4Object",
representation(
ID = "numeric",
Name = "character"
),
prototype(
ID = NA_real_,
Name = NA_character_
)
)
x = new("testS4Object")
x
出现错误是因为当我们打印的值x
,似乎在呼唤show
在幕后,但它正在使用shinyjs::show
代替methods::show
。通过印刷methods::show(x)
明确地,问题就消失了。但我有点困惑为什么默认情况下 S4 打印系统调用show
没有命名空间 - 这不是很危险,而且这个错误的发生也不是我的包的错吗?
拥有与中的函数同名的函数被认为是一个非常糟糕的主意methods
?我的想法是S4系统应该知道调用自己的show
函数或继承的 S4show
功能。
EDIT:我问 Hadley 他的想法,他似乎也认为这可能是 R 中的一个错误,我给 r-devel 发了电子邮件以征求他们的意见
该问题已报告给 R 核心团队,并于 2015 年 7 月 20 日在 SVN 提交 # 68702 中得到修复。这是修复方法 https://github.com/wch/r-source/commit/38ea40dcd0353af16d35296ee621338c49ae48c9
该修复将在 R 3.3.0 中提供
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)