旧版 R 包中由于 class(x) 返回矩阵和数组而出现错误 - 这是新的吗?

问题描述 投票:0回答:1

我正在使用一个名为

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 arrays matrix version
1个回答
1
投票

R 4.0.0 中的行为发生了变化。

news(Version == "4.0.0")
显示:

matrix
对象现在也继承自类
"array"
,所以例如,
class(diag(1))
c("matrix", "array")
。假设
class(matrix_obj))
的长度为一,这会错误地使代码无效。

为什么不使用

is.matrix
来代替呢?

© www.soinside.com 2019 - 2024. All rights reserved.