gpt4 book ai didi

R: 使用 `strsplit` 内存不足

转载 作者:行者123 更新时间:2023-12-02 07:34:54 24 4
gpt4 key购买 nike

我使用 strsplit 时内存不足(大概);这是代码:

split.fields <- function (frame, fields, split, suffix, ...) {
for (field in fields) {
v <- sapply(strsplit(frame[[field]],"@",...),"[",1)
frame[[paste0(field,suffix)]] <- frame[[field]]
frame[[field]] <- v
}
frame
}
split.version <- function (frame, fields)
split.fields(frame, fields, split="@", suffix="Ver", fixed=TRUE)
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 238165 12.8 467875 25 407500 21.8
Vcells 369492 2.9 905753 7 905631 7.0
> frame <- data.frame(browser = sample(c("Chrome@28","Chrome@27","Firefox@21","Firefox@22","IE@9","IE@8"), 1e7, replace=TRUE), stringsAsFactors=FALSE)
> str(frame)
'data.frame': 10000000 obs. of 1 variable:
$ browser: chr "IE@8" "Chrome@27" "Chrome@27" "Chrome@27" ...
> object.size(frame)
80000992 bytes
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 240555 12.9 467875 25.0 407500 21.8
Vcells 10373979 79.2 34109873 260.3 40534688 309.3
> system.time(frame <- split.version(frame,"browser"))
user system elapsed
73.700 0.872 74.831
> object.size(frame)
160001248 bytes
> str(frame)
'data.frame': 10000000 obs. of 2 variables:
$ browser : chr "IE" "Chrome" "Chrome" "Chrome" ...
$ browserVer: chr "IE@8" "Chrome@27" "Chrome@27" "Chrome@27" ...
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 264888 14.2 16652260 889.4 31376740 1675.7
Vcells 20459856 156.1 95461025 728.4 119226749 909.7

除了 R 进程的 RSS 现在是 1.6G 之外,这一切看起来或多或少是合理的。

这似乎暗示 最大使用量中的 1675.7Mb Ncells列还没有返回给操作系统。

我不太关心操作系统没有收回 RAM,我关心的是是为了处理 80M 的数据 R 分配了 1.6G(在我的真实数据上它用完可用的物理 RAM)

有没有办法提高内存效率?

例如,也许将字符向量转换为一个因子并在它的水平会有帮助吗?

R version 3.0.1 (2013-05-16) -- "Good Sport"
Platform: x86_64-pc-linux-gnu (64-bit)

最佳答案

如何使用 substrregexpr:

x <- c("Chrome@28","Chrome@27","Firefox@21","IE@8")
substr(x,1,regexpr("@",x)-1)
[1] "Chrome" "Chrome" "Firefox" "IE"

关于R: 使用 `strsplit` 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660202/

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