Я работаю с очень большим набором биологических данных, с ~ 1000 переменных (смесь чисел c и символа), измеренных из ~ 1 000 000 клеток. Излишне говорить, что таблица слишком велика, чтобы поместиться в память. Удаление переменных не вариант для моего последующего анализа, и таблица, вероятно, будет расти со временем. Поэтому моя стратегия состоит в том, чтобы преобразовать данные в базу данных SQL, которую можно легко запросить из R.
Здесь я использую базу данных PostgreSQL с пакетами DBI и ODB C:
db <- DBI::dbConnect(odbc::odbc(),
Driver = "PostgreSQL ODBC Driver(UNICODE)",
Server = "127.0.0.1",
Database = "db1",
UID = "user",
PWD = "password")
Для небольшой таблицы в памяти можно создать новую таблицу data
:
dbWriteTable(db, "data", data)
Аналогично для большой таблицы на диске (например, большой .csv) может обрабатывать данные в пакетном режиме. т.е. загружать 100 строк данных за раз и добавлять строки для увеличения таблицы SQL.
Однако в моем случае эта стратегия невозможна, так как каждая переменная (столбец) хранится в виде вектора в отдельном файле на диске (это из проприетарного формата, я ничего не могу сделать, чтобы помочь этому). Поэтому для построения таблицы SQL мне потребуется загрузить каждый столбец в R, а затем добавить каждый столбец по очереди в базу данных SQL.
Каков наилучший способ построения таблицы по одному столбцу за раз? Или есть альтернативная стратегия, которую мне не хватает?
Например, можно ли создать каждый столбец как отдельную таблицу, а затем связать их вместе. например:
data = list(col1 = 1:10, col2 = 11:20, col3 = 21:30)
# Create tables
for(i in 1:length(data)) {
dbWriteTable(db, as.character(i), data.frame(col1))
}
### Function to bind columns into single table ###