如何检查对象(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