gpt4 book ai didi

r - 'ddply' 导致 RStudio 在大型数据集 : ways to optimize? 上运行相关性时出现 fatal error

转载 作者:行者123 更新时间:2023-12-03 16:17:24 24 4
gpt4 key购买 nike

我需要计算由几列拆分的大型数据集(> 100 万行)的相关性。我试着结合 ddplycor()职能:

func <- function(xx) {
return(data.frame(corB = cor(xx$ysales, xx$bas.sales),
corA = cor(xx$ysales, xx$tysales)))
}

output <- ddply(input, .(IBD,cell,cat), func)

此代码在相对较小的数据集(具有 1000 行或 10000 行的数据帧)上运行良好,但当输入文件具有 100000 行或更多行时会导致“ fatal error ”。所以看起来我的电脑内存不足,无法用这些功能处理这么大的文件。

是否有机会以某种方式优化此类代码?也许可以替代 ddply更有效地工作,还是使用将一个函数拆分为多个连续函数的循环?

最佳答案

我对 ddply 没有任何问题在我的机器上,即使是 1e7行和数据如下所示。总共使用了大约。我的机器上有 1.7 GB。
这是我的代码:

options(stringsAsFactors=FALSE)

#this makes your code reproducible
set.seed(1234)
N_rows=1e7
input=data.frame(IBD=sample(letters[1:5],N_rows,TRUE),
cell=sample(letters[1:5],N_rows,TRUE),
cat=sample(letters[1:5],N_rows,TRUE),
ysales=rnorm(N_rows),
tysales=rnorm(N_rows),
bas.sales=rnorm(N_rows))

#your solution
library(plyr)

func <- function(xx) {
return(data.frame(corB = cor(xx$ysales, xx$bas.sales),
corA = cor(xx$ysales, xx$tysales)))
}

output <- ddply(input, .(IBD,cell,cat), func)

但是,如果您的问题比我的示例数据更复杂,您可以尝试 data.table包裹。这里有一些代码(请注意,我不是 data.table 的重度用户,下面的代码可能效率低下)
library(data.table)

input_dt=data.table(input)

output_dt=unique(input_dt[,`:=`(corB=cor(.SD$ysales,.SD$bas.sales),
corA=cor(.SD$ysales,.SD$tysales))
,by=c('IBD','cell','cat')]
[,c('IBD','cell','cat','corB','corA'),with=FALSE])

output_dt=output_dt[order(output_dt$IBD,output_dt$cell,output_dt$cat)]

它给出了相同的结果
all.equal(data.table(output),output_dt)
#[1] TRUE

head(output_dt,3)

# IBD cell cat corB corA
#1: a a a -6.656740e-03 -0.0050483282
#2: a a b 4.758460e-03 0.0051115833
#3: a a c 1.751167e-03 0.0036150088

关于r - 'ddply' 导致 RStudio 在大型数据集 : ways to optimize? 上运行相关性时出现 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811946/

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