如何测试一个对象是否是R基的公式?

问题描述 投票:0回答:2

R 有许多用于测试对象类型的助手,例如

is.character(x)

有(奇怪地缺失的)

is.formula(x)
的等价物吗?

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

r
2个回答
12
投票

根据我的评论,你可以这样做:

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

5
投票

您可以使用

rlang
文档中的
rlang::is_formula()
rlang::is_bare_formula() :

is_formula()
测试
x
是否是对
~
的调用。
is_bare_formula()
另外测试
x
不继承自“公式”以外的任何内容。

如果我们想纯粹基于调用进行测试,我们可以这样做:

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 包于 2019 年 11 月 10 日创建(v0.3.0)

© www.soinside.com 2019 - 2024. All rights reserved.