head(k) V1 1 1814338070 2 1199215279 3 1283239083 4 1201972527 5 404900682 6 3-6ren">
gpt4 book ai didi

r - 使用 "parallel"包在 R 中进行并行处理

转载 作者:行者123 更新时间:2023-12-01 23:58:32 26 4
gpt4 key购买 nike

我有两个数据框:

> head(k)
V1
1 1814338070
2 1199215279
3 1283239083
4 1201972527
5 404900682
6 3093614019

> head(g)
start end state value
1 16777216 16777471 queensland 15169
2 16777472 16778239 fujian 0
3 16778240 16779263 victoria 56203
4 16779264 16781311 guangdong 0
5 16781312 16781823 tokyo 0
6 16781824 16782335 aichi 0

> dim(k)
[1] 624979 1
> dim(g)
[1] 5510305 4

我想比较 data.frame(k) 中的每个值并匹配它是否适合 data.frame(g) 的开始和结束范围,以及它是否返回 state 的值和 data.frame 的值(七)

我遇到的问题是由于数据框的尺寸和进行匹配并返回我想要的值在我的计算机上需要 5 个小时。我使用了以下方法,但我无法使用我计算机上的所有内核,甚至无法使其正常工作:

return_first_match_position <- function(int, start,end) {
match = which(int >= start & int <= end)
if(length(match) > 0){
return(match[1])
}
else {
return(match)
}
}

library(parallel)
cl = makeCluster(detectCores())
matches = Vectorize(return_first_match_position, 'int')(k$V1,g$start, g$end)
p = parSapply(cl, Vectorize(return_first_match_position, 'int')(k$V1,g$start, g$end), return_first_match_position)
stopCluster(cl)

期望的输出是状态和值在 data.frame(k) 和 data.frame(g) 中的每次匹配出现的次数的百分比

想知道在 R 中有一种进行并行处理的智能方法吗?任何人都可以建议(任何来源)我如何学习/改进 R 中的书写功能吗?

最佳答案

我认为您想进行滚动连接。这可以通过 data.table 非常有效地完成:

DF1 <- data.frame(V1=c(1.5, 2, 0.3, 1.7, 0.5))
DF2 <- data.frame(start=0:3, end=0.9:3.9,
state=c("queensland", "fujian", "victoria", "guangdong"),
value=1:4)

library(data.table)
DT1 <- data.table(DF1, key="V1")
DT1[, pos:=V1]
# V1 pos
#1: 0.3 0.3
#2: 0.5 0.5
#3: 1.5 1.5
#4: 1.7 1.7
#5: 2.0 2.0
DT2 <- data.table(DF2, key="start")
# start end state value
#1: 0 0.9 queensland 1
#2: 1 1.9 fujian 2
#3: 2 2.9 victoria 3
#4: 3 3.9 guangdong 4

DT2[DT1, roll=TRUE]
# start end state value pos
#1: 0 0.9 queensland 1 0.3
#2: 0 0.9 queensland 1 0.5
#3: 1 1.9 fujian 2 1.5
#4: 1 1.9 fujian 2 1.7
#5: 2 2.9 victoria 3 2.0

关于r - 使用 "parallel"包在 R 中进行并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564312/

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