Mam macierz czynników w R i chcę ją przekonwertować na macierz zmiennych atrapowych 0-1 dla wszystkich możliwych poziomów każdego z czynników.R: konwersja macierzy rzadkiej
Jednak ta "obojętna" matryca jest bardzo duża (91690x16593) i bardzo rzadka. Muszę przechowywać go w rzadkiej macierzy, w przeciwnym razie nie mieści się w moim 12 GB pamięci RAM.
Obecnie używam następujący kod i działa bardzo dobrze i zajmuje kilka sekund:
library(Matrix)
X_factors <- data.frame(lapply(my_matrix, as.factor))
#encode factor data in a sparse matrix
X <- sparse.model.matrix(~.-1, data = X_factors)
Jednak chcę użyć pakietu e1071 w badania i ostatecznie zapisać macierz libsvm formatu z write.matrix.csr()
, więc najpierw muszę przekonwertować moją rzadką macierz na format SparseM.
próbowałem zrobić:
library(SparseM)
X2 <- as.matrix.csr(X)
ale bardzo szybko wypełnia moje RAM i ostatecznie R awarii. Podejrzewam, że wewnętrznie, as.matrix.csr
najpierw konwertuje rzadką macierz na gęstą matrycę, która nie mieści się w mojej pamięci komputera.
Inną alternatywą byłoby utworzenie mojej macierzy rozproszonej bezpośrednio w formacie SparseM.
Próbowałem as.matrix.csr(X_factors)
, ale nie akceptuję ramki danych czynników.
Czy istnieje odpowiednik sparse.model.matrix(~.-1, data = X_factors)
w pakiecie SparseM? Szukałem w dokumentacji, ale nie znalazłem.
Wszystko działało idealnie. Dziękuję za szybką odpowiedź. –