在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/