Я пытаюсь вычесть каждый столбец из другого столбца в большой таблице R data.table, которая имеет 13125 столбцов и 90 строк.
Я продолжаю предыдущий вопрос, который касается этого для data.tables меньших размеров (Вычесть каждый столбец из каждого другого столбца в R data.table).
Моя проблема в том, что в настоящее время мне не хватает памяти для создания результирующей таблицы комбинаций столбцов data.table (для чего, похоже, требуется 59,0 ГБ).
Мой вопрос: есть ли более эффективный с точки зрения памяти способ вычисления различий столбцов с помощью combn или, возможно, другой функции для больших наборов данных?
Код, который я использовал:
# I have a data.table of 13125 columns and 90 rows, called data.
# use combn to generate all possible pairwise column combinations (column + column),
# then within this apply a function to subtract the column value from its paired column value.
# this is done for each row, to produce a new datatable called res.
res <- as.data.table(combn(colnames(data), 2, function(x) data[[x[1]]] - data[[x[2]]]))
# take the pairwise column combinations and paste the pairing as the new column name
colnames(res) <- combn(colnames(data), 2, paste, collapse="_")
Прошу прощения, если этот вопрос слишком похож и поэтому считается дублированием. Я был бы очень признателен за любые советы о том, как повысить эффективность этого кода для масштаба моих данных.
n!/(k!(n-k)!)
. В этом примере R не может даже вычислить это, так какfactorial(13125)
ошибки сvalue out of range in 'gammafn'
. Поэтому я поддерживаю (решительно) утверждение @RomanLuštrik (мне пришлось обратиться к комбинаторному калькулятору бит-числа чтобы подтвердить свой номер). Вы уверены, что это действительно то, что вам нужно? Есть ли способ эвристически сократить пары, чтобы вы все еще находили искомое значение? - person r2evans   schedule 15.02.2019dim(combn(1:13125, 2))
и немного подождал. - person Roman Luštrik   schedule 16.02.2019