在R语言中,我有一个由Rle编码元素组成的S4 DataFrame。
可以使用以下代码模拟数据

x = DataFrame(Rle(1:10),Rle(11:20),Rle(21:30))


现在,我想将此数据帧从Matrix包转换为稀疏矩阵。在通常的data.frame上,可以做到

Matrix(x,sparse=TRUE)


但是,这不适用于DataFrames,因为它会出现以下错误:

Matrix(x,sparse=TRUE)


Error in as.vector(data) :
no method for coercing this S4 class to a vector

关于如何以相当有效的方式在数据类型之间进行转换的任何想法?

谢谢!

最佳答案

我在这里发布Michael Lawrence的answer以避免链接断开。此外,当Rle以零结尾时,还需要进行一些小错误修复才能处理这种情况:

# Convert from Rle to one column matrix
#
setAs("Rle", "Matrix", function(from) {
    rv <- runValue(from)
    nz <- rv != 0
    i <- as.integer(ranges(from)[nz])
    x <- rep(rv[nz], runLength(from)[nz])
    sparseMatrix(i=i, p=c(0L, length(x)), x=x,
                 dims=c(length(from), 1))
})


# Convert from DataFrame of Rle to sparse Matrix
#
setAs("DataFrame", "Matrix", function(from) {
  mat = do.call(cbind, lapply(from, as, "Matrix"))
  colnames(mat) <- colnames(from)
  rownames(mat) <- rownames(from)
  mat
})

关于r - 将Rle对象的S4 DataFrame转换为R中的稀疏矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29609275/

10-12 17:30