R - 检查变量是不是存在

Posted

技术标签:

【中文标题】R - 检查变量是不是存在【英文标题】:R - check if a variable existsR - 检查变量是否存在 【发布时间】:2016-12-28 22:26:28 【问题描述】:

我以为我已经解决了这个问题。我有一个变量叫做:

count_1

它只是一个包含一个元素的向量。当我遍历我的循环时,有时它有一个价值,而在其他时候它没有。我想要做的就是询问它是否包含任何内容,如果没有,只需循环回来。现在我的脚本失败了,因为当 count_1 为空时,我得到了这个:

需要 TRUE/FALSE 的地方缺少值 执行停止

这是我目前的尝试:

if (exists("count_1"))
   
    #code#
  

【问题讨论】:

@RonakShah 嗯,如果没有count_1,我认为这将失败。 if (exists("count_1") && !is.na(count_1)) 或两个嵌套的ifs。 实际上您提到的上述代码应该可以工作,除非它的na。如果在循环中只使用else next 我猜应该可以。事实上,我尝试了类似的方法并且它有效 - a <- 5 rm(b) if(a%%2 == 0 ) b <- 1 if(exists("b")) print('hi') else print('bye') @zx8754 我相信他们的#code# 包含一些带有逻辑比较或类似内容的子集。 @zx8754 是的,他们正试图通过if 条件来避免它。 永远不要使用exists作为通用代码。这是一个支持基础架构编程的函数,它根本不应该出现在普通分析(或一般用户级)代码中:如果您编写代码,您应该知道变量是否存在。在代码中提出问题肯定表明代码中存在逻辑错误。 【参考方案1】:

使用if(length(count_1) == 1) next 检查count_1中是否有值。

但是,这只有在您的代码执行以下操作时才有效:

dat <- 1:5
count_1 <- which(dat > 10)
count_1
# integer(0)
length(count_1) == 1
# [1] FALSE

它不适用于其他填充变量的方式,例如:

count_1 <- ifelse(any(dat > 10), which(dat > 10), NA)
count_1
# [1] NA
length(count_1) == 1
# [1] TRUE

【讨论】:

建议:或许把空和NA这两种可能性结合起来比较好,像这样:if (length(count_1) &amp;&amp; !is.na(count_1))... @RHertel 绝对。如果我们知道 OP 是谁创建了变量,我们就可以提供一个防弹的解决方案。【参考方案2】:

出于不同的原因,我需要检查函数中是否存在变量。我用这个:

check=function(x) tryCatch(if(class(x) == 'logical') 1 else 1, error=function(e) 0) 
varX=1 
check(varX)
[1] 1
rm(varX)
check(varX)
[1] 0
f1= function(x) if(check(x)) cat('exists') else cat('not exists')
f1(varX)
not exists

【讨论】:

以上是关于R - 检查变量是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 JavaScript 中是不是存在变量?

如何检查 JavaScript 中是不是存在变量?

如何检查R的参数(...)中是不是定义了任何变量?

检查变量是不是存在 - Terraform 模板语法

如何检查变量是不是存在[重复]

htaccess:根据变量检查文件是不是存在