Я относительно новичок в R, но имеет опыт работы на традиционных языках программирования (например, C, Java). Я недавно столкнулся с ситуацией, когда у меня было так много файлов данных для загрузки, что я тратил почти столько же времени на одну задачу, сколько и на фактический анализ. Я потратил немного времени на поиск в Google, но не столкнулся ни с какими решениями, которые я нашел непосредственно релевантными (я, возможно, пропустил что-то, я так нетерпелив). Несмотря на это, я придумал простое решение моей проблемы, которое я хотел бы поделиться с сообществом на случай, если кто-то еще окажется в подобных обстоятельствах.R скрипт, программно пакетный импорт нескольких файлов csv в виде списка фреймов данных (решение)
Немного информации о предыстории: данные, которые я анализирую, представляют собой показатели производительности и диагностики в реальном времени для экспериментальной системы, которая управляется потоками данных в реальном времени (то есть сложной). Результатом является то, что между именами проб проб не меняются и данные записываются непосредственно в файлы csv (я написал код ведения журнала, чтобы я стал моим собственным лучшим другом;). Есть десятки файлов, сгенерированных во время одного испытания, и у нас есть потенциально сотни испытаний, на которые можно рассчитывать.
У меня было несколько идей, и после того, как играть с кодом немного я придумал следующее решение:
# Create mapping that associates files with a handle that the loader will use to
# generate a named list of data frames (don't even try this on the cmdline)
createDataFileMapping <- function() {
list(
c(file = "file1.csv", descr = "descriptor1"),
c(file = "file2.csv", descr = "descriptor2"),
...
)
}
# Batch load csv files and return as list of data frames
loadTrialData <- function(load.dir, mapping) {
dfList <- list()
for (item in mapping) {
file <- paste(load.dir, item[["file"]], sep = "/")
df <- read.csv(file)
dfList[[ item[["descr"]] ]] <- df
}
return(dfList)
}
Вызывающую так просто, как loadTrialData("~/data/directory", createDataFileMapping())
.
Уверен, что есть другие способы решения этой проблемы, но вышеприведенная работа выполняется в моем случае. Я уверен, что это немного менее эффективно с точки зрения памяти, чем загрузка файлов непосредственно в кадры данных в глобальной среде, а синтаксис для передачи отдельных кадров данных для функций анализа/построения не столь изящный, как это могло бы быть, m не разборчив. Если у вас есть более гибкое/обобщаемое решение, пожалуйста, не стесняйтесь публиковать сообщения!
Поскольку здесь нет четкого ответного вопроса о программировании, этот пост кажется более подходящим для [codereview.se], чем Stack Overflow. – MrFlick
Возможно, хотя я думаю, что кто-то, кто ищет помощь в этой или подобной проблеме, может не согласиться. Переполнение стека - это справочная служба с высоким трафиком, и вся информация о размещении здесь заключается в том, чтобы размещать информацию, где она будет наиболее эффективной. Если это не соответствует «обычной» мудрости, пусть так и будет. И конечно, я тоже буду об этом писать. –