如何调用不带引号的exists()

时间:2014-06-02 01:17:16

标签: r

我正在尝试使用exists()来检查我的R会话中是否已分配变量。但是,令我困惑的是你必须使用引号......例如

> exists("con_psql")
[1] TRUE
> exists(con_psql)
Error in exists(con_psql) : invalid first argument

另外,我不清楚如果将exists应用于变量会发生什么,例如:

> temp_file_list = ls()
> exists(temp_file_list)
[1] TRUE

可是:

> temp_file_list[[length(temp_file_list) +1 ]] = "bogus_variable_name"
> exists(temp_file_list)
[1] TRUE

> temp_file_list = list("bogus_variable_name",temp_file_list)
> temp_file_list = unlist(temp_file_list)
> exists(temp_file_list)
[1] FALSE

这是否意味着exists()仅检查列表中的第一个条目?如果是这样,我发现这个特殊方面并不十分有用。

我更愿意在没有引号的情况下检查工作区中是否存在单个变量,这对我来说似乎更合乎逻辑。

1 个答案:

答案 0 :(得分:4)

您可以定义一个函数,它将为您解析参数并将其传递给

vexists <- function(...) {
    vars<-as.character(substitute(...()))
    sapply(vars, exists)
})

然后你可以打电话

vexists(con_psql)

vexists(con_psql, bogus_variable_name)

或任意数量的论点