2016-04-01 5 views
1

Скажите X - это большая разреженная матрица, где каждая строка имеет только одну запись, отличную от нуля. У меня есть вектор pos с расположением столбцов, куда идет этот ненулевой элемент. Для того, чтобы заполнить матрицу, следующий цикл работы:Заполните разреженную матрицу с помощью sapply в R

for (row in 1:nrow(X)) { 
    X[row, pos[row]] <- 1 
} 

Есть ли способ сделать это без петли, возможно, с помощью sapply?

ответ

3

Вы можете взглянуть на функции sparseMatrix от Matrix:

> library(Matrix) 
> (pos = sample(1:7)) 
[1] 5 1 6 4 7 2 3 
> sparseMatrix(1:7, pos) 
7 x 7 sparse Matrix of class "ngCMatrix" 

[1,] . . . . | . . 
[2,] | . . . . . . 
[3,] . . . . . | . 
[4,] . . . | . . . 
[5,] . . . . . . | 
[6,] . | . . . . . 
[7,] . . | . . . . 

В funcions из пакета Matrix принять некоторые использование, но они обеспечивают тонны преимуществ при работе с разреженными матрицами.

+2

Спасибо, это работает. Поскольку 'X' не обязательно является квадратной матрицей, я использовал' X <- sparseMatrix (i = 1: n, j = pos, x = 1) ', где' n' - количество строк. – nemarona