2016-03-09 119 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) 

这会通过单热编码(也称为虚拟变量)自动处理分类变量。如果需要,它也可以使用稀疏矩阵。