如何禁止S4对象的空插槽?

塞巴斯蒂安

说我有一个定义如下的类:

setClass("myclass", slots = list(id="character"))

我希望事情是这样的,ID是强制性的,myclass没有ID是无效的对象。目前,我得到以下信息:

> new("myclass")
An object of class "myclass"
Slot "id":
character(0)

我希望设置验证功能会有所帮助:

setValidity("myclass", function(object){
  if(length(slot(object, "id")) == 0L){
    return("You cannot do that")
  }
  return(TRUE)
})

> new("myclass")
An object of class "myclass"
Slot "id":
character(0)

但不幸的是,似乎具有空参数会导致绕过验证功能。有没有办法使这种类型的输入无效?

塞巴斯蒂安

我能找到的最佳解决方案是将验证步骤放入构造函数中(这对我来说似乎有点不对劲):

setMethod("initialize", "myclass", function(.Object, id){
  if(missing(id)) stop("The id is not allowed to be empty")
  .Object@id <- id
  validObject(.Object)
  return(.Object)
})

现在可以得到预期的结果:

> new("myclass")
Error in .local(.Object, ...) : The id is not allowed to be empty
> new("myclass", id = character())
Error in validObject(.Object) : 
  invalid class “myclass” object: You cannot do that
> new("myclass", id = "a")
An object of class "myclass"
Slot "id":
[1] "a"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R:从S4对象获取插槽的值(ScalarIndependenceTest)

来自分类Dev

遍历S4对象插槽Rcpp

来自分类Dev

带S4对象插槽的tbl_df

来自分类Dev

访问S4对象插槽内的数据

来自分类Dev

如何访问S4对象的方法

来自分类Dev

将S4对象存储在矩阵中

来自分类Dev

在R中创建S4对象

来自分类Dev

从列表向量monitoR中提取S4对象

来自分类Dev

将S4对象存储在矩阵中

来自分类Dev

在R中创建S4对象

来自分类Dev

如何原型化(初始化)从其他插槽派生的S4插槽?

来自分类Dev

如何原型化(初始化)从其他插槽派生的S4插槽?

来自分类Dev

r ggplot对象可以存储在S4插槽中吗?

来自分类Dev

如何在R中自动更新S4类的插槽

来自分类Dev

如何在R中使用<-设置插槽(S4)的值

来自分类Dev

如何在S4类中为稳健的线性模型创建插槽?

来自分类Dev

如何在R中使用<-设置插槽(S4)的值

来自分类Dev

使用类函数更改S4对象的“类”时会发生什么情况?

来自分类Dev

什么时候在R中调用S4对象的访问器方法?

来自分类Dev

使用.Call()将s4对象发送到C结构

来自分类Dev

将S4对象转换为R中的数据框或列表问题

来自分类Dev

如何定义S4取反对象的方法?

来自分类Dev

为什么lapply无法在具有as.list.default方法的S4对象上工作?

来自分类Dev

S4类中是否可以有一个S3插槽?

来自分类Dev

S4类:传递给new()的参数不会放入其插槽中

来自分类Dev

动态创建嵌套的s4类插槽名称并在R中分配值

来自分类Dev

R是否在分配时在S4类中复制未评估的插槽?

来自分类Dev

设置S4插槽以运行并代表神经网络层

来自分类Dev

在构造函数调用中按Tab时,显示S4类的元素和插槽

Related 相关文章

热门标签

归档