在您担心并行处理之前,首先对您的代码进行矢量化。R 代码通常是矢量化的,但并行处理仍然需要运行更多工作。和foreach
(Rcpp
如果你知道 C++)包也可以让事情变得更简洁。或者你可以试试 Julia 的运气,它虽然不成熟,但速度很快。但是,对于大多数日常工作,矢量化可以解决问题。
您的问题的答案在一定程度上取决于您的数据和函数的结构细节。以下做出了一些松散的假设,但您应该能够根据您的具体情况进行调整。(或者只是添加更多细节,我会回来编辑。)
# Let's say:
m <- 100
# `paste` functions can accept a sequence, and are easy to vectorize
product <- paste0("Product", 1:m)
# Let's chuck everything in a `data.frame` to stay organized:
data <- data.frame(product, originalPrice, discount)
# If `priceProduct` accepts vector arguments:
data$salePrice <- priceProduct(data$originalPrice, data$discount)
# If not:
data$salePrice <- sapply(seq(1, nrow(data)), function(x){
priceProduct(data$originalPrice[x], data$discounts[x])
})
# If it spits out a list, more cleaning is in order:
data$salePrice <- do.call(c,
sapply(seq(1, nrow(data)), function(x){
priceProduct(data$originalPrice[x], data$discounts[x])
}))