我正在尝试使用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()
仅检查列表中的第一个条目?如果是这样,我发现这个特殊方面并不十分有用。
我更愿意在没有引号的情况下检查工作区中是否存在单个变量,这对我来说似乎更合乎逻辑。
答案 0 :(得分:4)
您可以定义一个函数,它将为您解析参数并将其传递给
vexists <- function(...) {
vars<-as.character(substitute(...()))
sapply(vars, exists)
})
然后你可以打电话
vexists(con_psql)
或
vexists(con_psql, bogus_variable_name)
或任意数量的论点