6
votes

I'm doing some analysis something like this:

library(plyr)
input.files <- c("file1.txt", "file2.txt", "file3.txt")
input.data <- llply(input.files, load.file, .parallel=TRUE)
step.one.results <- llply(input.data, step.one, .parallel=TRUE)
step.two.results <- llply(step.one.results, step.two, .parallel=TRUE)
...
step.N.results <- llply(`step.N-1.results`, step.N, .parallel=TRUE)
...

Is there any way to make all the plyr functions parallel by default, so I don't always have to specify .parallel=TRUE for each step?

2
In addition to the solution below, it looks like there's a function called set.defaults in the diversitree package that can do this.Jake Fisher

2 Answers

10
votes
library(Defaults)
setDefaults(llply, .parallel=TRUE)

You'd have to setDefaults on every function for which you want to change the default formals. You can put this in your .Rprofile if you like.

You can also mess with the formals directly. e.g. formals(llply)$.parallel <- TRUE should work.

1
votes

From my answer to another question:

As the Defaults package is no longer available from CRAN, you can use default.

As an example:

x <- list(a = 1, b = 2, c = 3)
default::default(unlist) <- list(use.names = FALSE)
unlist(x)
#> [1] 1 2 3

unlist <- default::reset_default(unlist)
unlist(x)
#> a b c 
#> 1 2 3

Created on 2019-03-22 by the reprex package (v0.2.0.9000).