Если вы храните дубликаты по 8 байт, 20Kx20K означает 8 * 20 000 * 20 000/1024/1024 ~ 3 ГБ ОЗУ для хранения всего этого в памяти.
Я не знаю, сколько оперативной памяти у вас есть, но я бы посмотрел, что может сделать R для сериализации матрицы на диск при необходимости.
Матрица разреженная или полосатая? Можете ли вы сделать что-нибудь, чтобы уменьшить объем памяти, который вам нужен?
Насколько велика пустое пространство для вашей матрицы? Каково число условий (отношение наибольшего к наименьшему собственному значению)? Большое число условий может указывать на трудности в решении. Матрица не должна иметь нулевую строку или столбец, чтобы быть почти единственной.
ОБНОВЛЕНИЕ:
На основании вашего комментария я бы сказал, что ОЗУ - это наименьшая из ваших проблем. Похоже, можно хранить всю матрицу в памяти - если вы можете решить все это. Вы можете обратиться ко всей матрице. Вы работаете в 64-битной ОС - ваша версия R также 64-битная?
К сожалению, одним из побочных продуктов SVD является получение размера пустого пространства.
Вы можете получить минимальное собственное значение для вашей матрицы, используя итерацию Якоби. Lanczos может быть хорошим выбором для получения максимального собственного значения. Было бы много работы, чтобы получить их все; Вы можете просто захотеть оценить пять самых маленьких и самых больших.
Каждый раз, когда я сталкиваюсь с ошибкой в каком-либо программном обеспечении, я немедленно вставляю ее в поиск Google. По крайней мере, приятно знать, что я не первый, кто испытывает определенную проблему:
http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=Error+in+svd(m)+:+infinite+or+missing+values+in+'x'