Python список-понимание в R? - PullRequest
       5

Python список-понимание в R?

1 голос
/ 04 января 2012

Я хочу это в R:

fsC=[read.table(x) for x in Sys.glob('./Trial7/*.csv')]

, т.е. пытаться прочитать содержимое каждого файла в отдельный вектор, где векторы принадлежат структуре данных.

Python

[file(x, 'r').read() for x in glob.glob('./Trial7/*.csv')]

или даже лучше

[file(x, 'r') for x in glob.glob('./Trial7/*.csv')]

но я думаю, вы поняли ...

Ответы [ 2 ]

7 голосов
/ 04 января 2012

У вас есть два вопроса здесь. Во-первых, «учитывая вектор имен файлов, как вы читаете эти файлы в R?».

Вот ваш список имен файлов

trial7_files <- Sys.glob("Trial7/*.csv") 
#if you prefer to specify the names using regular expressions, try 
trial7_files <- dir("Trial7", "\\.csv$")

Как отмечалось ранее, lapply - лучший способ чтения файлов.

fsC <- lapply(trial7_files, read.csv)

Это дает вам список фреймов данных и приводит к вашему следующему вопросу. «Как объединить список фреймов данных с одинаковыми столбцами в один фрейм данных?»

Стандартный способ сделать это с do.call и rbind. Во-первых, полезно отметить, сколько строк в каждом наборе данных.

n_records <- sapply(fsC, nrow)
fsC <- do.call(rbind, fsC)

Это ваша проблема решена, хотя вы, вероятно, хотите, чтобы столбец сообщал вам, из какого файла пришла каждая строка.

fsC$source <- rep(trial7_files, n_records)
5 голосов
/ 04 января 2012

Используйте sapply для "отображения" векторов:

sapply(Sys.glob('./Trial7/*.csv'), read.table) -> fsc
...