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))
或两个嵌套的if
s。
实际上您提到的上述代码应该可以工作,除非它的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) && !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 - 检查变量是不是存在的主要内容,如果未能解决你的问题,请参考以下文章