Я застрял в простой петле, которая занимает больше часа, чтобы бежать, и нужна помощь, чтобы ускорить ее.Возвращаемое значение из столбца, указанного в той же строке
В принципе, у меня есть матрица с 31 столбцом и 400 000 строк. Первые 30 столбцов имеют значения, а 31-й столбец имеет номер столбца. Мне нужно, чтобы каждая строка извлекала значение в столбце, указанном 31-м столбцом.
Пример строки: [26,354,72,5987 .., 461,3] (это означает, что значение в колонке 3 желаемая (72))
Слишком медленная петля выглядит следующим образом:
a <- rep(0,nrow(data)) #To pre-allocate memory
for (i in 1:nrow(data)) {
a[i] <- data[i,data[i,31]]
}
Я думаю, что это будет работать:
a <- data[,data[,31]]
... но это приводит к «Ошибка: не может выделить вектор размером 2,8 Мб».
Я боюсь, что это очень простой вопрос, поэтому я потратил часы, пытаясь понять, применять, lapply, изменить форму, и больше, но почему-то я не могу получить контроль над концепцией векторизации в R.
В матрице фактически есть еще больше столбцов, которые также входят в параметр a, поэтому я не хочу перестраивать матрицу или разбить ее.
Ваша поддержка высоко оценена!
Крис
Вы уверены, что имеется достаточная свободная оперативная память? – mbq
применяются, и друзья не имеют ничего общего с векторией. – Shane
Ваш пример создаст другую матрицу того же размера, что и ваш оригинал.Похоже, что у вас заканчивается RAM в вашей рабочей области - числовой вектор длиной 400000 занимает 3,1 Мб, а матрица должна занимать 94,6 Мб. – James