我正在使用一个名为
PIMixture
的旧包(参见此处),它在代码的各个位置引发了很多错误。它们看起来都像这样或类似(以下几行实际上来自可重现的示例):
> library(PIMixture)
> data(PIdata)
> model<-"C_CIN3PLUS+L_CIN3PLUS+R_CIN3PLUS~RES_HPV16"
> fit1<-PIMixture(p.model=model,data=PIdata1, model="logistic-Weibull")
Error in if (class(mat2) == "numeric") { : the condition has length > 1
经过调查我发现
> class(mat2)
[1] "matrix" "array"
因此 if 子句返回错误。我不敢相信这是开发包时的一个问题,因为它会被注意到。因此,我想知道在 R 的早期版本中,
class(mat2)
是否可能仅评估为 "Matrix"
,因此长度为 1。我可以在 PIMixture
的源代码中应用修复,如下所示:class(mat2)[1]
。不太好,但是这个包就可以工作了。我想知道这个问题是否是由于 R 跨版本的更改而发生的,或者为什么会发生这个问题。
R 4.0.0 中的行为发生了变化。
news(Version == "4.0.0")
显示:
对象现在也继承自类matrix
,所以例如,"array"
是class(diag(1))
。假设c("matrix", "array")
的长度为一,这会错误地使代码无效。class(matrix_obj))
为什么不使用
is.matrix
来代替呢?