如何测试变量是否为多个指定类中的任意一类对象?(R语言)
测试变量是否属于指定类别的条件判断写法对比
我需要添加一个条件判断,用于测试现有变量db是否为bioData或character这两个类中任意一个的对象,以下是两种写法,想确认第二种写法是否有效?
示例1(推荐写法)
if (!inherits(db, c("bioData", "character"))) { cat(" Error: ") cat(" database must be bioData or character class ") stop() }
示例2(存疑的写法)
if (!class(db)[1] %in% c("bioData", "character")) { cat(" Error: ") cat(" database must be bioData or character class ") stop() }
写法有效性分析
- 示例1靠谱:
inherits()函数专门用来检查对象是否继承自指定类中的任意一个,不管对象的类列表有多长,只要沾边就会返回TRUE,完全贴合需求。 - 示例2有坑:
class()返回的是对象的所有类组成的向量,取[1]只看第一个类。比如如果db是bioData的子类(比如叫subBioData),这时候class(db)[1]是subBioData,但实际上它是继承自bioData的,按需求应该算符合条件,但示例2会误判成不符合,直接报错。
不管有没有继承场景,示例1的写法都比示例2更准确简洁,建议用示例1。
内容的提问来源于stack exchange,提问作者abraham
相关产品推荐
相关产品推荐

