适当的方法来子集化 big.matrix

4

我想知道在R中是否有一种“正确”的方法来对大型矩阵对象进行子集操作。虽然对矩阵进行子集操作很简单,但是该类别总是回退到“matrix”。在处理小型数据集时这不是问题,但是在处理极大型数据集时,子集仍可以从“big.matrix”类别中受益。

require(bigmemory)
data(iris)
# I realize the warning about factors but not important for this example
big <- as.big.matrix(iris)

class(big)
[1] "big.matrix"
attr(,"package")
[1] "bigmemory"

class(big[,c("Sepal.Length", "Sepal.Width")])
[1] "matrix"

class(big[,1:2])
[1] "matrix"
2个回答

5

我后来了解到,子集切片big.matrix的“正确”方法是使用sub.big.matrix,但这仅适用于连续的列和/或行。目前尚未实现非连续子集切片。

sm <- sub.big.matrix(big, firstCol=1, lastCol=2)

-1

在不使用as.big.matrix对子集进行调用的情况下似乎不可能。

根据big.matrix的文档,

如果x是一个大矩阵,则x [1:5,]作为包含x的前五行的R矩阵返回。

我想这也适用于列。因此,似乎需要调用:

a <- as.big.matrix(big[,1:2])

为了使子集也成为big.matrix对象。

class(a)
# [1] "big.matrix"
# attr(,"package")
# [1] "bigmemory"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接