gpt4 book ai didi

R 真的很慢矩阵/data.frame 索引选择

转载 作者:行者123 更新时间:2023-12-01 11:47:46 24 4
gpt4 key购买 nike

我正在选择 data.frame g.raw 的子集,如下所示:

g.raw <- read.table(gfile,sep=',', header=F, row.names=1) 
snps = intersect(row.names(na.omit(csnp.raw)),row.names(na.omit(esnp.raw)))
g = g.raw[snps,]

它有效。但是,最后一行非常慢。

g.raw 大约有 18M 行,snps 大约有 1M。我意识到这些数字非常大,但这似乎是一个简单的操作,将 g 读入内存中的矩阵/data.frame 不是问题(花了几分钟),而我上面描述的这个操作正在小时。

如何加快速度?我只想将 g.raw 缩小很多。

谢谢!

最佳答案

看来data.table可以大放异彩了。

复制data.frame:

set.seed(1)
N <- 1e6 # total number of rows
M <- 1e5 # number of rows to subset

g.raw <- data.frame(sample(1:N, N), sample(1:N, N), sample(1:N, N))
rownames(g.raw) <- sapply(1:N, function(x) paste(sample(letters, 50, replace=T), collapse=""))
snps <- sample(rownames(g.raw), M)

head(g.raw) # looking into newly created data.frame
head(snps) # and rows for subsetting

data.frame 方法:

system.time(g <- g.raw[snps,])
# > user system elapsed
# > 881.039 0.388 884.821

data.table 方法:

require(data.table)
dt.raw <- as.data.table(g.raw, keep.rownames=T)
# rn is a column with rownames(g.raw)
system.time(setkey(dt.raw, rn))
# > user system elapsed
# > 8.029 0.004 8.046

system.time(dt <- dt.raw[snps,])
# > user system elapsed
# > 0.428 0.000 0.429

好吧,使用这些 NM 可以提高 100 倍(使用更大的 N 甚至可以提高速度)

您可以比较结果:

head(g)
head(dt)

关于R 真的很慢矩阵/data.frame 索引选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14389196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com