Многократное повторение функции на матрице и суммирование полученных матриц - PullRequest
1 голос
/ 19 сентября 2019

У меня проблемы с написанием кода на R при попытке повторить строку кода несколько раз.

Я написал следующий код:

rep(blank.matrix<-((distance(site.by.species[sample(nrow(site.by.species)),], method='jaccard')<=existing.jaccard.similarity)*1)+blank.matrix,times=100)

, в котором я пытаюсь переставить сайт по матрице видов:

site.by.species[sample(nrow(site.by.species)),]

затем получим матрицу подобия jaccardиз этого:

distance("", method='jaccard')

, а затем сравнить его с существующей матрицей подобия, где я хочу найти все значения, меньшие или равные ей

<=existing.jaccard.similarity

и затем я хочувыполните это 100 раз - сложив 1 и 0 из каждой созданной матрицы вместе, чтобы у меня был вывод, который дает мне число раз, когда мои existing.jaccard.similarity значения меньше, чем равны моим переставленным значениям.

Проблема, с которой я сталкиваюсь, заключается в том, что моя матрица довольно большая (8000x700), поэтому, хотя этот код, кажется, запускается, когда я повторяю <5 раз, при попытке повторить большее количество раз я получаю ошибку: </p>

Ошибка: невозможно выделить вектор размером x Гб.

Я был удивлен этим, потому что думал, что буду хранить только обновленный blank.matrix в памяти - но я понимаю, что, возможно, естьоЕсть способы решить эту проблему через apply() или для циклов.Я ценю любую помощь в том, как очистить этот код!

1 Ответ

0 голосов
/ 20 сентября 2019

Я нашел решение:

repeat{
  results = ((distance(site.by.species[sample(nrow(site.by.species)),],method='jaccard')<=jaccard.similarity)*1) + results
   print(results[1,1])
   if (results[1,1] == 100){
     print("repeat loop ends");
     break
   }
}

Я использовал здесь функцию повтора, потому что я искал вывод только одной матрицы, а не всех матриц вместе в виде массива, который я и получалметод replicate().Мой repeat заканчивается, когда results[1,1] достигает 100, потому что этот элемент в матрице является подобием того же сайта, который всегда будет равен таблице jaccard.similarity ([2,2]; [3,3]; ии так далее будет работать), поэтому каждый прогон добавляет 1 к этому столбцу.

Вероятно, есть гораздо более простые способы сделать это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...