2016-03-09 120 views
2

我試圖在我們的數據集上運行LASSO,爲此,我需要將非數字變量轉換爲數字,最好通過稀疏矩陣轉換。然而,當我嘗試使用矩陣命令,我得到了同樣的錯誤:將矩陣稀疏轉換爲R的罕見錯誤消息

Error in asMethod(object) : invalid class 'NA' to dup_mMatrix_as_geMatrix 

我認爲這是由於NA在我的數據,所以我做了一個na.omit,得到了同樣的錯誤。我用我的代碼一個小型子集又試了一次又一次得到了同樣的錯誤:

> sparsecombined <- Matrix(combined1[1:10,],sparse=TRUE) 
Error in asMethod(object) : invalid class 'NA' to dup_mMatrix_as_geMatrix 

這是該數據集我試圖用的代碼,最後一行轉換:

enter image description here

是有什麼可能會阻止稀疏轉換?

回答

1

我認爲這個錯誤是由於你的矩陣中有非數字數據類型。

也許首先將您的nun-numeric列(如UniqueCarrier)轉換爲使用單熱編碼的二元向量。只有然後將矩陣轉換爲稀疏。

這裏是我的代碼,我用的是轉換:

# Convert Genre into binary variables 

# Convert genreVector into a corpus in order to parse each text string into a binary vector with 1s representing the presence of a genre and 0s the absence 
library(tm) 
library(slam) 

convertToBinary <- function(category) { 
    genreVector = category 
    genreVector = strsplit(genreVector, "(\\s)?,(\\s)?") # separate out commas 

    genreVector = gsub(" ", "_", genreVector) # combine DirectorNames with whitespaces 

    genreCorpus = Corpus(VectorSource(genreVector)) 
    #dtm = DocumentTermMatrix(genreCorpus, list(dictionary=genreNames)) 
    dtm = DocumentTermMatrix(genreCorpus) 
    binaryGenreVector = inspect(dtm) 

    return(binaryGenreVector) 
    #return(data.frame(binaryGenreVector)) # convert binaryGenreVector to dataframe 
} 

directorBinary = convertToBinary(x$Director) 
directorBinaryDF = as.data.frame(directorBinary) 

見nograpes答案

recommenderlab, Error in asMethod(object) : invalid class 'NA' to dup_mMatrix_as_geMatrix

1

,最簡單的方法,將分類變量爲Lasso是用我的glmnetUtils package ,它爲glmnet提供了一個公式/數據框架接口。

glmnet(ArrDelay ~ ArrTime + uniqueCarrier + TailNum + Origin + Dest, 
     data=combined1, sparse=TRUE) 

這會通過單熱編碼(也稱爲虛擬變量)自動處理分類變量。如果需要,它也可以使用稀疏矩陣。