R中的逐行并行处理?

问题描述

我正在处理大型数据集,为此我编写了一个代码来对数据帧执行逐行操作,这是顺序的。这个过程很慢。 我正在尝试使用并行处理来执行操作以使其更快。

这是代码

library(geometry)

# Data set - a
data_a   = structure(c(10.4515034409741,15.6780890052356,12.5581992918563,9.19067944250871,14.4459166666667,11.414,17.65325,12.468,11.273,15.5945),.Dim = c(5L,2L),.Dimnames = list(c("1","2","3","4","5"),c("a","b")))

# Data set - b
data_b   = structure(c(10.4515034409741,11.3318076923077,13.132273830156,6.16003995082975,11.59114820435,10.9573192090395,15.5945,11.5245,12.0249,6.3186,13.744,11.0921),.Dim = c(10L,"5","6","7","8","9","10"),"b")))


conv_hull_1    <- convhulln( data_a,options = "FA")                        # Draw Convex Hull


test = c()


for (i in 1:nrow(data_b)){
  
  
  df = c()
  
  con_hull_all        <- inhulln(conv_hull_1,matrix(data_b[i,],ncol = 2))
  
  df$flag             <- ifelse(con_hull_all[1] == TRUE,ifelse(con_hull_all[1] == FALSE,1,2))
  
  
  test                <- as.data.frame(rbind(test,df))
  
  print(i)
  
}

test

有没有办法并行化行明智的计算?

如您所见,对于小数据集,计算时间确实很短,但是一旦我增加数据大小,计算时间就会急剧增加。

你能用代码提供解决方案吗? 提前致谢。

解决方法

您可以利用 inhulln 函数的参数。这允许传入多于一行的待测试点。

我已经在根据原始数据制作的 320,000 行矩阵上尝试了下面的代码,而且速度很快。

library(geometry)
library(dplyr)
# Data set - a
data_a   = structure(
    c(
        10.4515034409741,15.6780890052356,12.5581992918563,9.19067944250871,14.4459166666667,11.414,17.65325,12.468,11.273,15.5945
    ),.Dim = c(5L,2L),.Dimnames = list(c("1","2","3","4","5"),c("a","b"))
)

# Data set - b
data_b   = structure(
    c(
        10.4515034409741,11.3318076923077,13.132273830156,6.16003995082975,11.59114820435,10.9573192090395,15.5945,11.5245,12.0249,6.3186,13.744,11.0921
    ),.Dim = c(10L,.Dimnames = list(c(
        "1","5","6","7","8","9","10"
    ),"b"))
)

conv_hull_1    <- convhulln( data_a,options = "FA")                        # Draw Convex Hull

#Make a big data_b
for (i in 1:15) {
    data_b = rbind(data_b,data_b)
}
In_Or_Out <- inhulln(conv_hull_1,data_b)
result <- data.frame(data_b) %>% bind_cols(InOrOut=In_Or_Out)

我使用 dplyr::bind_cols 将输入或输出结果绑定到原始数​​据的数据框版本,因此您可能需要针对您的特定环境进行一些更改。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...