2013-12-13 3 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

Я бы проголосовал за второй. но если вы хотите обернуть его в функцию, то необходимо изменить либо «диафрагму», либо «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. –

Смежные вопросы