Ошибка в матрице (unlist (значение, рекурсивное = FALSE, use.names = FALSE), в пределах 2 для циклов - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь решить проблему с одной строкой кода, которая, я подозреваю, связана с задействованными циклами for.В результате произошла ошибка:

Ошибка в матрице (unlist (значение, рекурсивное = FALSE, use.names = FALSE), nrow = nr,: «данные» должны быть векторного типа, были «NULL '

Я перевожу из MATLAB, с которым я не знаком:

SharedSpecies=find(A(:,i)>0 & A(:,j)>0)

Мои данные: количество образцов в столбцах, гены в строках, но введены как немаркированныеdata.frame. Содержит множество нулей и небольших чисел, например:

A <- matrix(c(0.000113255,4.23E-05,0.000336436,0.00E+00, 0.000034303, 3.00E-04, 0.000280363, 9.82E-05, 0.00068042, 3.52E-04, 0.0000561, 0.00E+00, 0, 0.00E+00, 0, 0.00E+00), 4,4)

NumSamples <- dim(A)[2] 

Затем длинная функция с проблемным разделом, содержащим два цикла for:

fancy_function <- function(A)
{
    for (i in 1:NumSamples-1)
      {
        for (j in i+1:NumSamples)
        {
         # Prior bits of function here but not problematic in debugging

         SharedSpecies <- rownames(subset(A, A[,i]>0 & A[,j]>0))
         SharedSpecies <- as.numeric(SharedSpecies)

         Overlap[i,j] <- 0.5*(sum(A[SharedSpecies,i]) + 
         sum(A[SharedSpecies,j]))
        }
      }
}

Мне кажется,не могу заставить эту функцию fancy_function (A) работать, я думаю, это проблема с разделом A [, i]> 0 & A [, j]> 0, так как я много раз менял формулу вокруг этого выражения, и это всегдаСтрока с проблемой. Я также попытался с помощью которого, как в:

c(which(A[,i]>0 & A[,j]>0))

или с помощью «с» с каким-то неуклюжим фреймом данных, чтобы добавить имена строк во фрейме данных и подмножество этих значений:

list_of_true_falses <- as.data.frame(with(A, A[,i]>0 & A[,j]>0))

Обратите внимание, что это не то же самое, что первоначальное удаление всех нулевых значений длям фрейма данных (как я также пытался), поскольку это проходит через каждую возможную пару столбцов, чтобы удалить нули в этой паре.Я также пытался преобразовать данные в другие классы, но безрезультатно.

Вывод в MATLAB, к которому я стремлюсь, - это вектор, который начинается с 1,2,3,11. Я могу добиться этого, введя значения iи j, и, проверяя этот раздел кода независимо, кажется, что он просто разваливается в форме функции, поэтому я подозреваю, что цикл for является проблемой.

Большое спасибо

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