如何正确获取R语言中S4对象所属的类?
获取S4对象的类名的正确方法
你提到用class(f)能拿到S4对象的类名,但担心是依赖S3机制——其实这个方法对S4对象完全可靠,R做了兼容处理,class()返回的就是它的S4类名。不过如果想要更贴合S4体系的方式,还有以下几种选择:
方法1:从类定义中提取类名
用getClassDef()获取S4对象的类定义对象,再提取其中的类名字段:
cls <- setClass("Foo", slots = c("hello")) f <- new("Foo") # 获取类名 getClassDef(f)@className # 输出:[1] "Foo"
方法2:通过is()函数的返回结果获取
不带第二个参数调用is(),会返回对象所属的所有类(包括继承链和S4标记),取第一个元素就是直接类名:
is(f)[1] # 输出:[1] "Foo"
补充说明
class(f)本质是读取对象的class属性,而S4对象的class属性本身就存储了其S4类名,所以这个方法并非依赖S3机制,完全可以放心用。- 如果你的类存在继承关系,
is(f)会返回完整的继承链,比如Foo继承自Bar的话,is(f)会返回c("Foo", "Bar", "S4"),按需选取即可。
内容的提问来源于stack exchange,提问作者Stefano Borini
相关产品推荐
相关产品推荐

