我使用的大多数数据集通常都是中等大小(大多数小于10万行),因此我的代码的执行时间对我来说通常不是那么大的问题。
但是我最近试图编写一个函数,它将2个数据帧作为参数(例如,m& n行)并返回一个m * n行的新数据帧。然后,我必须对结果数据集执行一些操作。因此,即使m&值很小n(比如大约1000个)结果数据帧将有超过一百万行。
当我在这个数据集上尝试简单的操作时,代码需要花费不可思议的长时间才能运行。具体来说,我的结果数据框有2列数字值,我需要添加一个新列,它将比较这些列的值并将它们分类为 - "大于","小于&#34 ;," Tied"
我使用以下代码:
df %>% mutate(compare=ifelse(var1==var2,"tied",
ifelse(var1>var2,"Greater than","lesser then")
而且,正如我之前提到的,这需要永远运行。我对此做了一些研究,我发现显然对data.table的操作明显比数据帧快,所以也许这是我可以尝试的一个选项。
但我之前从未使用过data.tables。所以在我深入研究之前,我很想知道是否有其他方法可以加快大数据集的计算时间。
您认为我还可以尝试哪些其他选择?
谢谢!
答案 0 :(得分:1)
对于像这样的大问题,我喜欢并行化。由于对各行的操作是原子的,这意味着特定行上的操作结果与每隔一行无关,这是一个非常平行的"情况。
library(doParallel)
library(foreach)
registerDoParallel() #You could specify the number of cores to use here. See the documentation.
df$compare <- foreach(m=df$m, n=df$n, .combine='c') %dopar% {
#Borrowing from @nicola in the comments because it's a good solution.
c('Less Than', 'Tied', 'Greater Than')[sign(m-n)+2]
}