R有许多用于测试对象类型的帮助器,例如is.character(x)
是否有(奇怪的遗失)is.formula(x)
的等价物?
(PS:我看到至少有一个包已经实现了这个外部基础R)
答案 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创建