r - 防止将类属性设置为元素
问题描述
尝试将类属性设置为不满足特定条件的元素时,如何能够引发错误?
例如,我们看到当我们有任何 mode 对象时list
,我们不能将其 class 属性设置为factor
。IE
a <- as.list(1:3)
class(a) <- "factor"
Error in class(a) <- "factor" :
adding class "factor" to an invalid object
我需要将同样的想法复制到my_class
课堂上。我不希望它在列表上工作。IE
a <- as.list(1:3)
class(a) <-"my_class" # SHOULD THROW AN ERROR
attr(a, "class") <- "my_class" # SHOULD THROW AN ERROR.
我如何在 R 中做到这一点?谢谢
解决方案
这在 S3 类系统中是不可能的。这些对一些基本 S3 类的特殊检查是在 R 的 C 代码中实现的,目前无法将它们扩展到其他 S3 类。如果您需要强制执行对象类型并且不想向所有方法添加断言,我建议您切换到 S4 类:
constructor <- setClass("my_class", slots = c(x="numeric"))
y <- constructor(x = as.list(1:3))
#Error in validObject(.Object) :
# invalid class “my_class” object: invalid object for slot "x" in class "my_class": got class "list", should be or extend class "numeric"
y <- constructor(x = 1:3)
y
#An object of class "my_class"
#Slot "x":
#[1] 1 2 3
推荐阅读
- javascript - JSON 长度给出不正确的值
- ios - 如何在 iOS 中全屏显示 Twilio 视频视图
- java - 如何从事件中获取数据到主函数?
- r - 如何在 R 中指定嵌套的 for 循环,它将对多个行块重复相同的操作
- java - 相当于 Google Ads API 中的 AD_PERFORMANCE_REPORT?
- python - Deeppavlov 内存使用情况
- ssis - 高级编辑器 SSPIS:我可以设置一次忽略多列上的截断错误,而不是一一忽略吗?
- css - 如何使用anime.js绘制虚线svg路径?
- flutter - 如何查看项目的flutter版本
- python - 在 SQLAlchemy 和 PostgreSQL 中存储 32 字节的 `bytes` 对象