R: как использовать длинные векторы с randomForest?

Одной из новых особенностей R 3.0.0 было введение длинных векторов. Однако .C() и .Fortran() не принимают длинные векторные входы. На R-bloggers я нахожу:

Это предосторожность, так как очень маловероятно, что существующий код будет написан для обработки длинных векторов (и обертки R часто предполагают, что длина (x) является целым числом)

Я работаю с R-пакетом randomForest, и этот пакет явно нуждается .Fortran(), поскольку он выходит из системы, оставляя сообщение об ошибке

Ошибка в randomForest.default: длинные векторы (аргумент 20) не поддерживаются в .Fortran

Как преодолеть эту проблему? Я использую randomForest 4.6-7 (построен под R 3.0.2) на 64-битном компьютере Windows 7.

Ответ 1

Единственный способ гарантировать, что ваш входной кадр данных будет принят randomForest, заключается в том, чтобы гарантировать, что векторы внутри кадра данных не имеют длины, которая превышает 2 ^ 31 - 1 (т.е. не длинная). Если вы должны начать с кадра данных, содержащего длинные векторы, тогда у вас будет подмножество фрейма данных для достижения приемлемого измерения для векторов. Вот один из способов, которыми вы могли бы подмножить фрейм данных, чтобы сделать его подходящим для randomForest:

# given data frame 'df' with long vectors
maxDim <- 2^31 - 1;
df[1:maxDim, ]

Тем не менее, есть большая проблема с этим, что вы выбрали бы все наблюдения (т.е. признаки), появляющиеся в строках 2 ^ 31 или выше. На практике вам, вероятно, не нужно так много наблюдений для запуска случайного расчета леса. Простым решением этой проблемы является просто взять статистически достоверный подвыбор исходного набора данных с размером, который не превышает 2 ^ 31 - 1. Храните данные с помощью векторов R не длинного типа, и ваш расчет randomforest должен выполняться без каких-либо проблем.