Перебираем большую матрицу, содержащую 3000 строк, и вычисляем корреляцию. - PullRequest
0 голосов
/ 31 июля 2010

Спасибо, Нико! Почти попал туда после того, как исправил мелкие ошибки. Здесь я прилагаю свой сценарий:

datamatrix=read.table("ref.txt", sep="\t", header=T, row.names=1)
correl <- NULL
for (i in 1:nrow(datamatrix)) {
   correl <- apply(datamatrix, 1, function(x) {cor(t(datamatrix[, i]))})
   write.table(correl, paste(row.names(datamatrix)[i], ".txt", sep=""))
}

Но я боюсь, что проблема в части function(x), которая, кажется, равна t(datamatrix[i,j]), которая вычислит корр из любых двух строк.

На самом деле мне нужно перебрать матрицу. сначала cor(row01, row02) получить одну корреляцию между rwo01 и row02; затем cor(row01, row03), чтобы получить корреляцию между row01 и rwo03, .... и до корреляции между row01 row30000. Теперь я получил первый столбец для row01 Row01 1.000 Row02 0,012 Row03 0,023 Row04 0,820 Row05 0,165 Row06 0,230 Row07 0,376 Row08 0,870 и сохранил его в файл row01.txt.

Аналогичным образом получить Row02 Row01 0,012 Row02 1.000 Row03 0,023 Row04 0,820 Row05 0,165 Row06 0,230 Row07 0,376 Row08 0,870 и сохранить его в файл row02.txt.

Всего я получу 30000 файлов. Это глупо, но это может пропустить ограничение памяти и может быть легко обработано для корреляции определенной строки.

1 Ответ

1 голос
/ 01 октября 2010

Во-первых, ваш код ошибочен: шаг корреляции должен быть следующим:

correl <- apply(datamatrix, 1, function(x) {cor(x,datamatrix[i, ])})

Затем лучше явно закрыть соединения, в противном случае R может оставить слишком много открытых соединений открытым.

Наконец, использование write.table не гарантирует, что вы сможете легко получить данные.Вы должны построить стол самостоятельно.Попробуйте этот код:

correl <- NULL
XX <- for (i in 1:nrow(datamatrix)) {
   correl <- apply(datamatrix, 1, function(x) {cor(x,datamatrix[i, ])})
   ff <- file(paste(row.names(datamatrix)[i], ".txt", sep=""),open="at")
      write(paste("row","cor"),ff)
      tmp <- paste(names(correl),correl)
      write(tmp, ff,sep="\n")
   }
   close(ff)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...