2013-12-13 83 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'。 –