Чтение нескольких файлов в R — файлы с разделителями TAB

Я хотел бы изменить приведенный ниже фрагмент кода, который считывает несколько файлов .csv (значения, разделенные запятыми), чтобы сообщить ему, что файлы разделены табуляцией, т. Е. Файлы .tsv.

temp = list.files(pattern="*.csv")
myfiles = lapply(temp, read.delim)

Для отдельных файлов я сделал (используя пакет readr):

data_1  <- readr::read_delim("dataset_1.csv", "\t", escape_double = FALSE, trim_ws = TRUE)

Любая помощь? Спасибо,

Рикардо.


person Ricardo Silva    schedule 10.04.2017    source источник
comment
Не проверял, но что-то вроде следующего должно работать, потому что lapply разрешает дополнительные параметры после FUN. myfiles = lapply(temp, read_delim, delim="\t", escape_double = FALSE, trim_ws = TRUE)   -  person Andrew Lavers    schedule 11.04.2017


Ответы (1)


Я предполагаю, что вы ищете следующее:

Версия 1: определяемая пользователем функция

my_read_delim <- function(path){
  readr::read_delim(path, "\t", escape_double = FALSE, trim_ws = TRUE)
}
lapply(temp, my_read_delim)

Версия 2: использование аргумента ... для lapply
lapply имеет в качестве третьего аргумента ..., что означает, что аргументы после второго передаются в функцию, указанную в качестве второго аргумента:

lapply(temp, readr::read_delim, delim = "\t", escape_double = FALSE, trim_ws = TRUE)

Вторая версия по сути такая же, как и первая, но более компактная.


Предполагая, что все файлы имеют одинаковые столбцы:

В большинстве приложений после чтения данных через read_delim вы хотите их rbind. Вы можете использовать map_df из пакета purrr, чтобы упростить это следующим образом:

require(purrr)
require(readr)
# or require(tidyverse)

temp <- list.files(pattern="*.csv")
map_df(temp, read_delim, delim = "\t", escape_double = FALSE, trim_ws = TRUE)
person Rentrop    schedule 10.04.2017
comment
Фантастический! Работает отлично. Спасибо! - person Ricardo Silva; 15.04.2017