gpt4 book ai didi

r - 在R中使用foreach将内存使用量加倍

转载 作者:行者123 更新时间:2023-12-05 01:33:05 35 4
gpt4 key购买 nike

我在Ubuntu发行版中使用R 2.15。

我正在应用一个功能,为来自受欢迎的社交网站的流文本数据分配关键字。我的目标是通过将数据分为两部分然后应用函数来使过程更高效:

textd<-data.frame(text=c("they","dont","think","it","be","like it is", "but it do"),keywordID=0)

textd<-split(textd, seq(nrow(textd)) %/% 2 %% 2 == 0)
keywords<-data.frame(kwds=c("be","do","is"),keywordID=1:3)

library(doParallel)
registerDoParallel(2)
library(foreach)


textd<-foreach (j = 1:2)%dopar%{
t<-textd[[j]]

for (i in keywords$kwds){ #for loop to assign keyword IDs

tmp<-grepl(i, t$text, ignore.case = T)
cond<-tmp & t$keywordID==0
if (length(t$keywordID[cond]) > 0){
t$keywordID[cond]<-keywords$keywordID[keywords$kwds==i]

#if kw field is already populated...
cond2<-tmp & t$keywordID!=0
extra<-t[cond2,]
if (length(extra$keywordID) > 0){
extra$keywordID<-keywords$keywordID[keywords$kwds==i]

t<-rbind(t,extra)}}
}
t
}


library(data.table)
textd<-as.data.frame(data.table::rbindlist(textd))


问题在于,这样做会使两个内核使用相同数量的RAM,这意味着每个内核将使用的RAM数量加倍。它快用完了。我究竟做错了什么?如何获得RAM在内核之间进行数量分配?感谢您的光临。

最佳答案

尝试在循环内拆分数据。像这样:

library(itertools)
registerDoParallel(2)


textd<-foreach (t=isplitRows(textd, chunks=2), .combine=rbind,)%dopar%{

for (i in keywords$kwds){ #for loop to assign keyword IDs

tmp<-grepl(i, t$text, ignore.case = T)
cond<-tmp & t$keywordID==0
if (length(t$keywordID[cond]) > 0){
t$keywordID[cond]<-keywords$keywordID[keywords$kwds==i]

#if kw field is already populated...
cond2<-tmp & t$keywordID!=0
extra<-t[cond2,]
if (length(extra$keywordID) > 0){
extra$keywordID<-keywords$keywordID[keywords$kwds==i]

t<-rbind(t,extra)}}
}
return(t)
}

关于r - 在R中使用foreach将内存使用量加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049572/

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