2013-12-13 84 views
14

考慮到數據幀名稱是字符串,檢查數據幀是否存在的首選方法是什麼?我能想到的:檢查數據幀是否存在

df_name <- 'iris' 

# Option 1 
tryCatch(is.data.frame(get(df_name)), error=function(cond) FALSE) 

# Option 2 
if (exists(df_name)) is.data.frame(get(df_name)) else FALSE 
+2

我會爲第二個投票。但是如果你想把它包裝在一個函數中,那麼'iris'或'df_name'需要改變,所以使用相同的名字。 –

回答

20

第二個選項可以縮短到

exists(df_name) && is.data.frame(get(df_name)) 

運營商&&讓懶惰的評價,即第二條語句只計算如果第一個返回TRUE

0

另外一個

ifelse(any(ls() %in% "a"), is.data.frame(get("a")),FALSE) 
+1

這似乎既是對'ifelse()'的不當使用,又無法將「搜索」擴展到可能不在全局環境中的可用系統數據集。 –

0

存在(「df_name」)會給出TRUE(如果數據框存在)和FALSE(如果不存在)。那爲什麼要麻煩?第一個響應中的trycatch語句不起作用。它的輸出始終是FALSE。

+0

也許你的回答只檢查一個對象是否存在,而不是該對象是否作爲數據框存在? –

+1

另外,'tryCatch'語句爲我返回了'TRUE'。 –