不同R包中的S3类名冲突

时间:2018-05-30 14:02:15

标签: r

我看到其他语言也有类似的问题,但我找不到R.的答案。

我正在编写一个带有名为“Matrix”的S3类的R-package。此类的对象表示一个矩阵,其中包含一些特定于应用程序的属性和泛型方法。我需要使用这些对象的向量表示,我使用基函数“as.vector”。问题是在另一个R-package中定义了一个名为“Matrix”的类,并且该类的方法as.vector.Matrix似乎在启动时加载。当我在我的类“Matrix”的对象上调用as.vector时,这会导致错误的方法调度。

# using a prefix '#' for the class name in order to avoid a name conflict.
m1 <- structure(matrix(rnorm(4), 2, 2), class=c("#Matrix", "matrix"))
as.vector(m1)
[1] -0.2785165 -0.3832539  0.7353889 -0.6382483

# using class "Matrix" generates an error:
m2 <- structure(matrix(rnorm(4), 2, 2), class=c("Matrix", "matrix"))
as.vector(m2)
Error: not-yet-implemented method for coerce(<Matrix>, <character>).
->>  Ask the package authors to implement the missing feature.

对我来说,这个错误有两个问题: 首先,在编写包时,无法知道哪些R包将与其一起加载。由于类似的名称冲突,这可能导致包的偶发错误。 其次,即使有办法知道任何潜在的冲突,为了避免这种冲突,更改我的包中的类名似乎是一种矫枉过正。

0 个答案:

没有答案