我想检查是否有变量在R中定义,而不会出错。我该怎么做呢?
我的尝试(不成功):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
谢谢!
我想检查是否有变量在R中定义,而不会出错。我该怎么做呢?
我的尝试(不成功):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
谢谢!
当前回答
是存在的,因为“…”定义”。如。
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
其他回答
是存在的,因为“…”定义”。如。
> exists("foo")
[1] FALSE
> foo <- 1:10
> exists("foo")
[1] TRUE
你想要exists():
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
正如其他人指出的,你在寻找存在。请记住,无论你是否定义了变量,using exists都将返回true:
> exists("data")
[1] TRUE
为了解决这个问题(正如Bazz指出的那样;See ?exists),使用inherits参数:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
当然,如果你想搜索附加包的名称空间,这也不够:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
我能想到的解决这个问题的唯一方法——在附加包中搜索,而不是在基本包中搜索——如下所示:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
比较用"data "替换_object_name_。table”(TRUE) vs。“var”(假)
(当然,如果你不在RStudio上,我认为第一个自动附加的环境是“package:stats”)
如果你不想使用引号,你可以使用deparse(substitute())技巧,这是我在?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
如果你在一个函数中,missing()就是你想要的。
exchequer = function(x) {
if(missing(x)){
message("x is missing… :-(")
}
}
exchequer()
x is missing… :-(