Создать список всех фреймов данных/таблиц в глобальной среде?

Как создать именованный список всех фреймов данных/таблиц в глобальной среде в R? Есть ли способ сделать это без ручного жесткого кодирования всех фреймов данных/таблиц?

Т.е. если глобальная среда содержит кадры данных/таблицы df_1, my_data_1, science_1, all_data, как создать вывод, который выглядит так:

files_list <- list(
df_1 = df_1,
my_data_1 = my_data_1,
science_1 = science_1,
all_data = all_data
)
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги &lt;ul&gt; и &lt;li&gt; для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
0
1
65
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Мы можем Filter элементы, которые являются data.frame или tibble в среде, над которой мы работаем, например. в глобальной среде это может быть

Filter(length, eapply(.GlobalEnv, 
     function(x) if (is.data.frame(x)||is_tibble(x)) x))

Здесь нужно is_tibble? is.data.frame(tibble(iris)) все равно возвращает TRUE

GuedesBF 13.02.2023 02:33

@GuedesBF Не совсем, это просто для того, чтобы сделать это явным. Если бы я только что использовал is.data.frame (который был бы базовым классом), то были бы комментарии о том, что непонятно, как он включает регистр символов.

akrun 13.02.2023 07:47

Мы можем сначала get все объекты, затем keep только data.frames

library(purrr)

mget(ls()) %>% keep(is.data.frame)

Пожалуйста, попробуйте приведенный ниже код, который сгенерирует df

naml <- list()

  for (i in seq_along(ls(envir =.GlobalEnv))) {
    j <- ls(envir =.GlobalEnv)[i]
  if (any(class(get(j))=='data.frame')) name <- {j} else name <- NA
  if (any(class(get(j))=='data.frame')) class <- class(get(j))[3] else class <- NA
  if (!is.na(name) & !is.na(class)) {
  df <- data.frame(namex=name,classx=class)
  naml[[j]] <- df
  }
  }

df2 <- do.call(rbind, naml) %>% rownames_to_column('name') %>% 
pivot_wider(names_from = name, values_from = namex)

Ответ принят как подходящий

Базовым способом объединения методов @GuedesBF и @akrun может быть использование ls, mget и Filter.

Filter(is.data.frame, mget(ls()))
#Filter(is.data.frame, mget(ls(.GlobalEnv))) #More explicit using globEnv

Другие вопросы по теме