Winston Chang showed (http://rpubs.com/wch/46428) that accessing objects in environments is fastest by using e[["n"]], where e is an environment and n a name of an object. Here, benchmarks are listed for assigning objects.
Result (median in micro seconds):
## median expr
## 1 0.1440 X <- letters
## 2 0.4420 .Internal(assign("X", letters, e, F))
## 3 1.1820 e[["X"]] <- letters
## 4 1.2570 e$X <- letters
## 5 1.8380 assign("X", letters, envir = e, inherits = F)
## 6 1.9415 assign("X", letters, e, inherits = F)
Code:
library(microbenchmark)
e <- new.env()
e$X <- letters
summary(
microbenchmark(
X <- letters,
.Internal(assign("X", letters, e, F)),
e[["X"]] <- letters,
e$X <- letters,
assign("X", letters, envir = e, inherits = F),
assign("X", letters, e, inherits = F),
unit = "us", times = 500L))[,c("median","expr")]
s
sessionInfo()
## R version 3.1.1 (2014-07-10)
## Platform: x86_64-unknown-linux-gnu (64-bit)
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] microbenchmark_1.4-2
##
## loaded via a namespace (and not attached):
## [1] colorspace_1.2-4 digest_0.6.4 evaluate_0.5.5 formatR_1.0
## [5] ggplot2_1.0.0 grid_3.1.1 gtable_0.1.2 htmltools_0.2.6
## [9] knitr_1.7 lattice_0.20-29 MASS_7.3-33 multcomp_1.3-7
## [13] munsell_0.4.2 mvtnorm_1.0-0 plyr_1.8.1 proto_0.3-10
## [17] Rcpp_0.11.3 reshape2_1.4 rmarkdown_0.3.3 sandwich_2.3-2
## [21] scales_0.2.4 splines_3.1.1 stringr_0.6.2 survival_2.37-7
## [25] TH.data_1.0-3 tools_3.1.1 yaml_2.1.13 zoo_1.7-11