Within a given process, R is actually quite good about not making unnecessary copies. With foreach, of course, we are creating additional processes, and each of those processes requires its own copy of the data it is working on. If those individual processes only require a portion of the data, you can optimize the computations to pass only the required data. (Extract the subsets in the master process, then pass just those to the workers.) But no, the .export options in foreach() won't help a great deal.