如何检查对象(variables)是否在R中定义?
我想检查是否有一个variables是在R中定义的,而不会出现错误。 我怎样才能做到这一点?
我的尝试(不成功):
> is.na(ooxx) Error: object 'ooxx' not found > is.finite(ooxx) Error: object 'ooxx' not found
谢谢!
你想exists()
:
R> exists("somethingUnknown") [1] FALSE R> somethingUnknown <- 42 R> exists("somethingUnknown") [1] TRUE R>
请参见?exists
,对“…已定义”的某些定义。 例如
> exists("foo") [1] FALSE > foo <- 1:10 > exists("foo") [1] TRUE
如果你在一个函数中,missing()就是你想要的。
exchequer = function(x) { if(missing(x)){ message("x is missing… :-(") } } exchequer() x is missing… :-(
正如其他人指出的,你正在寻找exists
。 请记住,无论您是否定义了variables,使用R的基本包使用的名称都将返回true:
> exists("data") [1] TRUE
为了解决这个问题(正如Bazz指出的那样,请参阅?exists
),请使用inherits
参数:
> exists("data", inherits = FALSE) [1] FALSE foo <- TRUE > exists("foo", inherits = FALSE) [1] TRUE
当然,如果你想要search附件包的名字空间,这也将失败:
> exists("data.table") [1] FALSE require(data.table) > exists("data.table", inherits = FALSE) [1] FALSE > exists("data.table") [1] TRUE
我能想到的唯一的办法是 – search附加的软件包而不是基本的软件包 – 如下所示:
any(sapply(1:(which(search() == "tools:rstudio") - 1L), function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
用"data.table"
( TRUE
)与"var"
( FALSE
)比较replace_object_name_
(当然,如果你不在RStudio上,我认为第一个自动连接的环境是"package:stats"
)
如果你不想使用引号,你可以使用deparse(substitute())技巧,我在例子中find了?substitute:
is.defined <- function(sym) { sym <- deparse(substitute(sym)) env <- parent.frame() exists(sym, env) } is.defined(a) # FALSE a <- 10 is.defined(a) # TRUE