Загрузка таблиц прямо в список с помощью пользовательской функции lapply - PullRequest
0 голосов
/ 06 мая 2018

У меня есть функция, которая читает определенный файл в папке, указанной в lapply, и загружает эту таблицу в R. Функция выглядит следующим образом:

load_files <- function(folder) {
  file <- list.files(path = paste0(folder, "/"), pattern = "quast.tsv")
  assign(
    paste0("ref_", gsub("^GCF_(.*?)_ASM(.*?)$", "\\1", folder)),
    read.delim(
      paste0(folder, "/", file),
      stringsAsFactors = F,
      header = TRUE,
      sep = "\t"
    )
  )
}

Функция назначает конкретное имя каждому фрейму данных. Ранее я использовал это в цикле for для создания одного фрейма данных на чтение таблицы. Однако я хочу, чтобы он загружал каждый фрейм данных в один и тот же список, не загружая их в отдельные фреймы данных. То, что я использую, выглядит так:

lapply(folder_names, load_files)

Где имя_папки - это в основном просто символьный вектор с именами папок, идентифицированными другой функцией.

Есть ли какой-нибудь простой способ заставить lapply загружать каждый назначенный фрейм данных непосредственно в один и тот же список? Я попробовал следующее, но это не сработало:

append(df_list, lapply(folder_names, load_files))

Однако это возвращает только то же самое, что и только для лапы.

1 Ответ

0 голосов
/ 06 мая 2018

Я бы так и сделал. У меня есть 2 текстовых файла в моем рабочем каталоге. И когда я закончу, у меня в списке будет 2 data.frames с соответствующими именами.

file_list <- list.files( pattern = "*.txt")
file_list 
[1] "movies.txt" "mtcars.txt"

df_list <- lapply(file_list,
                  FUN = function(files) {
                    read.csv(files, header = TRUE, sep = ",")
                  })

str(df_list)
List of 2
 $ :'data.frame':   2 obs. of  1 variable:
  ..$ X1..Jumanji..Adventure.Children.s.Fantasy: Factor w/ 2 levels "2::American President:The (1995)::Comedy|Drama|Romance",..: 1 2
 $ :'data.frame':   32 obs. of  1 variable:
  ..$ mpg.cyl.disp.hp.drat.wt.qsec.vs.am.gear.carb: Factor w/ 32 levels "AMC Javelin 15.2 8 304 150 3.15 3.435 17.3 0 0 3 2",..: 18 19 5 13 14 31 7 21 20 22 ...


files <- gsub(".txt", "", file_list)
files
[1] "movies" "mtcars"

names(df_list) <- files

str(df_list)
List of 2
 $ movies:'data.frame': 2 obs. of  1 variable:
  ..$ X1..Jumanji..Adventure.Children.s.Fantasy: Factor w/ 2 levels "2::American President:The (1995)::Comedy|Drama|Romance",..: 1 2
 $ mtcars:'data.frame': 32 obs. of  1 variable:
  ..$ mpg.cyl.disp.hp.drat.wt.qsec.vs.am.gear.carb: Factor w/ 32 levels "AMC Javelin 15.2 8 304 150 3.15 3.435 17.3 0 0 3 2",..: 18 19 5 13 14 31 7 21 20 22 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...