2016-08-22 169 views
-1

我以为我想出了这一个。我有一个变量叫:R - 检查一个变量是否存在

count_1 

它只是一个元素的向量。当我经历我的循环时,有时它有价值,而在其他时候则不然。我想要做的就是询问它是否包含任何内容,如果不包含,只是回头看看。

遗漏值,其中TRUE/FALSE需要 执行暂停

这是迄今为止我尝试:

if (exists("count_1")) 
    { 
    #code# 
    } 
+0

错误信息意味着你的变量存在但包含一个缺失值,即一个“NA”值。也许你应该使用'if(!is.na(count_1))'或'if(is.finite(count_1))'。但是,如果您有很多循环,则您正在编写低效的R代码。 – Roland

+0

也许这需要一个双重检查 - “if(exists(”count_1“)&!is.na(count_1))' –

+0

@Roland'count_1 < - NA;如果(存在(“count_1”)){“是”}其他{“否”}工作......不知道如何重现上述错误。 – zx8754

回答

1
眼下,因为当COUNT_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 
+1

建议:也许将两种可能性,空值和NA值合并,如下所示:if(length(count_1)&&!is.na(count_1))...' – RHertel

+0

@RHertel绝对可能。如果我们知道OP创建变量的人,我们可以提供一个防弹解决方案。 – nya

1

出于不同的原因

但是,如果你的代码做这样的事情,这只会工作,我需要检查一个变量是否存在于一个函数中。我用这个:

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 
相关问题