Как исправить ошибку 'длинные векторы еще не поддерживается' в R - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь запустить некоторый R-код, и он падает из-за длинной ошибки вектора.Я использую R 3.5.1 и получаю следующую ошибку:

"Ошибка в for (n in 1: k) {: длинные векторы еще не поддерживаются: eval.c: 6393"

Размер входного файла FASTA составляет 1 ГБ.Ошибка появляется сразу после запуска цикла.Я попытался уменьшить размер входного файла, но, похоже, это было не так, и я думаю, что это может быть связано с используемыми пакетами.Код, который создает проблемы, выглядит следующим образом:

library(biomaRt) #version 2.36.1
library(biomartr)#version 0.8.0
library(R.utils) #version 2.7.0
library(seqinr)  #version 3.4.5

genmt <- read.fasta("genymt.fa")

gensize1 <- 16900
subsize1 <- 22*2

BinToDec <- function(x) 
sum(2^(which(rev(unlist(strsplit(x, "")) == 1))-1))

DecToBin <- function(x)
{
 b <- intToBin(x)
 while(nchar(b) < subsize1)
   b <- paste("0",b,sep = "")
 b
}

bin1 <- gsub('A','00',genmt)
bin1 <- gsub('T','01',bin1)
bin1 <- gsub('C','10',bin1)
bin1 <- gsub('G','11',bin1)

for (i in 1:((gensize1*2)-subsize1)) {

  print(i)
  beg1 <- i
  end1 <- i+(subsize1-1)

  sub1 <- substr(bin1, beg1, end1)

  dec1 <- BinToDec(sub1)

  if (i == 1) {
    exists1 <- dec1
    rep1 <- 1
  } else {
    flag1 <- any(exists1 == dec1)

    if (flag1) {
      ind1 <- which(exists1 == dec1)
      rep1[ind1] <- rep1[ind1]+1
    } else {
      exists1 <- c(exists1,dec1)
      rep1 <- c(rep1,1)
    }
  }
}

dec_res <- -1
k <- 2^subsize1
for (n in 1:k) {
  print(n)
  flag1 <- any(exists1 == n)

  if (!flag1) {
    dec_res <- n
    break
  } 
}

bin_res <- DecToBin(dec_res)

gen_res <- matrix(,nrow = 0,ncol = subsize1/2)
ind <- 0
for(i in seq(1,subsize1,2)) {
  ind <- ind + 1
  ifelse(substr(bin_res,i,i+1) == "00",gen_res[ind] <- "A",
         ifelse(substr(bin_res,i,i+1) == "01",gen_res[ind] <- "T",
                ifelse(substr(bin_res,i,i+1) == "10",gen_res[ind] <-"C",gen_res[ind] <- "G")))
}

Не могли бы вы помочь мне разобраться в ситуации и исправить ее?

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