如何测试对象是否是基础R中的公式?

时间:2016-04-01 16:19:42

标签: r

R有许多用于测试对象类型的帮助器,例如is.character(x)

是否有(奇怪的遗失)is.formula(x)的等价物?

(PS:我看到至少有一个包已经实现了这个外部基础R)

2 个答案:

答案 0 :(得分:11)

从我的评论中,您可以这样做:

is.formula <- function(x){
   inherits(x,"formula")
}

答案 1 :(得分:0)

您可以使用 rlang 的文档中的rlang::is_formula()rlang::is_bare_formula()

  

is_formula()测试x是否是对~的调用。 is_bare_formula()还测试了x不会从“公式”之外的任何事物继承。

inherits()是一种常见的方法,但是如果我们要严格一些,我们应该看一下调用,而不是像rlang::is_formula()那样查看class属性,我在这里提出一个基本版本:

a_formula <- ~foo
not_a_formula <- "foo"
class(not_a_formula) <- "formula"

inherits(a_formula, "formula")
#> [1] TRUE
inherits(not_a_formula, "formula")
#> [1] TRUE

is.formula <- function(x) is.call(x) && x[[1]] == quote(`~`)
is.formula(a_formula)
#> [1] TRUE
is.formula(not_a_formula)
#> [1] FALSE

reprex package(v0.3.0)于2019-11-10创建