2016-08-22 38 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 
相關問題