我正在使用一个名为PIMixture(see here)的较旧的包,它在代码的不同位置抛给我许多错误.它们看起来都像这样或类似(以下几行实际上来自可重现的示例):

> 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子句返回错误.我不敢相信在开发这个包的时候这是一个问题,因为它会被注意到.因此,我想知道在Rclass(mat2)的早期版本中,是否可能只计算为"Matrix",因此长度为1.我可以在PIMixture的源代码中应用如下修复:class(mat2)[1].不是很好,但之后一揽子计划就奏效了.我想知道这个问题是不是由于版本之间的R变化引起的,或者为什么会发生这个问题.

推荐答案

在R版本4.0.0或4.2.0中,行为发生了变化,具体取决于您认为的"变化".news(Version == "4.0.0")表示:

matrix对象现在也继承自类"array",因此,例如,class(diag(1))就是c("matrix", "array").这会错误地假定class(matrix_obj))的长度为1,从而使代码无效.

news(Version == "4.2.0")表示:

在长度大于1的条件下调用if()while()会给出错误而不是警告.因此,环境变量_R_CHECK_LENGTH_1_CONDITION_不再具有任何效果.

为什么不使用is.matrixis.numeric呢?(如果看不到函数的逻辑,很难说什么测试是合适的.)

另请参阅Martin Mächler的博客文章from 2019:When you think class(.) == *, think again!

R相关问答推荐

pivot_longer:names_to和names_pattern

从R中的地址提取街道名称

R gtsummary tBL_summary,包含分层和两个独立分组变量

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

使用Shiny组合和显示复制和粘贴的数据

根据收件箱中的特定值提取列名

r中的stat_difference函数不起作用

带有叠加饼图系列的Highmap

在"gt"表中添加第二个"groupname_col",而不连接列值

单个轮廓重叠条的单独图例

R根据条件进行累积更改

如何优化向量的以下条件赋值?

计算时间段的ECDF(R)

如何将SAS数据集的列名和列标签同时包含在r中GT表的表首?

如何在R中使用hmm TMB提前一步预测观察到的状态?

将摘要图添加到facet_WRAP gglot的末尾

如何为混合模型输出绘制不同的线型?

如何调整一个facet_work()面板内的框图和移动标签之间的水平宽度?

如何从嵌套数据中自动创建命名对象?在R中

R-找出存在其他变量的各种大小的所有组合