【问题标题】:Uncommon error message converting Matrix to Sparse in R在 R 中将 Matrix 转换为 Sparse 的罕见错误消息
【发布时间】:2016-06-23 04:52:18
【问题描述】:

我正在尝试在我们的数据集上运行 LASSO,为此,我需要将非数字变量转换为数字,最好是通过稀疏矩阵。但是,当我尝试使用 Matrix 命令时,我得到了同样的错误:

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

这是我尝试用最后一行代码转换的数据集:

是否有任何跳出可能阻止稀疏转换的内容?

【问题讨论】:

    标签: r matrix sparse-matrix glmnet


    【解决方案1】:

    将分类变量合并到 LASSO 中的最简单方法是使用我的 glmnetUtils package,它提供了 glmnet 的公式/数据框接口。

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

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

    【讨论】:

      【解决方案2】:

      我认为错误是由于您的矩阵中有非数字数据类型。

      也许首先使用 one-hot 编码将您的非数字列(如 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

      【讨论】:

        【解决方案3】:

        由于在预期矩阵的位置传递了一个数据框,我收到了这个错误,看起来这与您得到它的原因相同。解决方案很简单——在将数据传递给Matrix 函数之前将其转换为矩阵:

        sparsecombined <- Matrix(as.matrix(combined1[1:10,]),sparse=TRUE)
        

        在您的情况下,此代码可能会抱怨,因为您在其中存储了一些非数字数据(例如 TailNum 列)。因此,您需要只选择数字列。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-15
          • 1970-01-01
          • 1970-01-01
          • 2013-03-18
          • 2020-10-22
          • 2015-07-23
          • 1970-01-01
          • 2019-01-14
          相关资源
          最近更新 更多