Итак, вот что я в итоге сделал. Относительно просто написать подпрограмму, которая выводит разреженную матрицу (класс dgCMatrix
) в текстовый файл в формате SVDLIBC «разреженный текст», затем вызывает исполняемый файл svd
и считывает три результирующих текстовых файла обратно в R.
Суть в том, что это довольно неэффективно - у меня уходит около 10 секунд на чтение и запись файлов, но фактический расчет SVD занимает всего около 0,2 секунды или около того. Тем не менее, это, конечно, лучше, чем вообще не выполнять вычисления, так что я счастлив. =)