Ответ 1
Второй вариант можно сократить до
exists(df_name) && is.data.frame(get(df_name))
Оператор &&
допускает ленивую оценку, т.е. Второй оператор оценивается только в том случае, если первый возвращает TRUE
.
Каков предпочтительный способ проверить, что фрейм данных существует, если у вас есть имя фрейма данных как строка? Я могу думать:
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
Второй вариант можно сократить до
exists(df_name) && is.data.frame(get(df_name))
Оператор &&
допускает ленивую оценку, т.е. Второй оператор оценивается только в том случае, если первый возвращает TRUE
.
Еще один
ifelse(any(ls() %in% "a"), is.data.frame(get("a")),FALSE)
существует ("df_name") даст TRUE (если существует фрейм данных) и FALSE (если это не так). Так зачем беспокоиться? Операция trycatch в первом ответе не работала. Его вывод был FALSE все время.