From 954da7b0064580aeef74a4f54a237ffb34cb952c Mon Sep 17 00:00:00 2001 From: Jason Klaassen Date: Fri, 19 Jul 2019 21:22:05 +0000 Subject: [PATCH 1/2] Speed up for the slow examples, but slight slow down for the faster ones. Using parallel mclapply. --- R/do.R | 5 ++-- RBuildIgnore/Do Profile with Speedup.Rprofvis | 24 ++++++++++++++++++ RBuildIgnore/Do Profile.Rprofvis | 24 ++++++++++++++++++ man/mPlotting.Rd | 8 +++--- vignettes/Resampling.Rnw | 8 ------ vignettes/figure/bwplot-1.pdf | Bin 0 -> 5323 bytes vignettes/figure/coins-hist-1.pdf | Bin 0 -> 5060 bytes vignettes/figure/densityplot-1.pdf | Bin 0 -> 20903 bytes vignettes/figure/dot-1.pdf | Bin 0 -> 4956 bytes vignettes/figure/flips-1.pdf | Bin 0 -> 5327 bytes vignettes/figure/hist-1.pdf | Bin 0 -> 5006 bytes vignettes/figure/pbinom-1.pdf | Bin 0 -> 6088 bytes vignettes/figure/price-mileage-graph-1.pdf | Bin 0 -> 5519 bytes vignettes/figure/sleep-1.pdf | Bin 0 -> 5372 bytes vignettes/figure/unnamed-chunk-13-1.pdf | Bin 0 -> 4532 bytes vignettes/figure/unnamed-chunk-23-1.pdf | Bin 0 -> 5669 bytes vignettes/figure/unnamed-chunk-24-1.pdf | Bin 0 -> 6314 bytes vignettes/figure/unnamed-chunk-25-1.pdf | Bin 0 -> 25814 bytes vignettes/figure/unnamed-chunk-45-1.pdf | Bin 0 -> 4906 bytes vignettes/figure/unnamed-chunk-46-1.pdf | Bin 0 -> 8200 bytes 20 files changed, 54 insertions(+), 15 deletions(-) create mode 100644 RBuildIgnore/Do Profile with Speedup.Rprofvis create mode 100644 RBuildIgnore/Do Profile.Rprofvis create mode 100644 vignettes/figure/bwplot-1.pdf create mode 100644 vignettes/figure/coins-hist-1.pdf create mode 100644 vignettes/figure/densityplot-1.pdf create mode 100644 vignettes/figure/dot-1.pdf create mode 100644 vignettes/figure/flips-1.pdf create mode 100644 vignettes/figure/hist-1.pdf create mode 100644 vignettes/figure/pbinom-1.pdf create mode 100644 vignettes/figure/price-mileage-graph-1.pdf create mode 100644 vignettes/figure/sleep-1.pdf create mode 100644 vignettes/figure/unnamed-chunk-13-1.pdf create mode 100644 vignettes/figure/unnamed-chunk-23-1.pdf create mode 100644 vignettes/figure/unnamed-chunk-24-1.pdf create mode 100644 vignettes/figure/unnamed-chunk-25-1.pdf create mode 100644 vignettes/figure/unnamed-chunk-45-1.pdf create mode 100644 vignettes/figure/unnamed-chunk-46-1.pdf diff --git a/R/do.R b/R/do.R index 35ec5032..39d6c823 100644 --- a/R/do.R +++ b/R/do.R @@ -6,7 +6,6 @@ require(compiler) require(rlang) parallel::detectCores() NA - #' Set seed in parallel compatible way #' @@ -270,7 +269,7 @@ print.repeater <- function(x, ...) # if each element is a data frame, combine them with bind_rows if ( all( sapply( l, is.data.frame ) ) ) { return( - lapply(l, function(x) {mutate(x, .row= 1:n())}) %>% + parallel::mclapply(l, function(x) {mutate(x, .row= 1:n())}) %>% dplyr::bind_rows() %>% mutate(.index = c(1, 1 + cumsum( diff(.row) != 1 ))) ) @@ -573,4 +572,4 @@ setMethod( attr(result, "lazy") <- e2_lazy if (out.mode == "data.frame") attr(result, "culler") <- cull return(result) - }) + }) \ No newline at end of file diff --git a/RBuildIgnore/Do Profile with Speedup.Rprofvis b/RBuildIgnore/Do Profile with Speedup.Rprofvis new file mode 100644 index 00000000..6da77419 --- /dev/null +++ b/RBuildIgnore/Do Profile with Speedup.Rprofvis @@ -0,0 +1,24 @@ + + + + +profvis + + + + + + + + + + +
+
+ +
+
+ + + + diff --git a/RBuildIgnore/Do Profile.Rprofvis b/RBuildIgnore/Do Profile.Rprofvis new file mode 100644 index 00000000..e15ae12f --- /dev/null +++ b/RBuildIgnore/Do Profile.Rprofvis @@ -0,0 +1,24 @@ + + + + +profvis + + + + + + + + + + +
+
+ +
+
+ + + + diff --git a/man/mPlotting.Rd b/man/mPlotting.Rd index 33ac5421..41fcfd51 100644 --- a/man/mPlotting.Rd +++ b/man/mPlotting.Rd @@ -8,18 +8,18 @@ \title{Interactive plotting} \usage{ mPlot(data, format, default = format, system = system_choices()[1], - show = FALSE, title = "", data_text = expr_text(data), ...) + show = FALSE, title = "", data_text = rlang::expr_text(data), ...) mMap(data, default = "map", system = "ggplot2", show = FALSE, - title = title, data_text = expr_text(data), ...) + title = title, data_text = rlang::expr_text(data), ...) mScatter(data, default = c("scatter", "jitter", "boxplot", "violin", "line"), system = "ggformula", show = FALSE, title = "", - data_text = lazyeval::expr_text(data)) + data_text = rlang::expr_text(data)) mUniplot(data, default = c("histogram", "density", "frequency polygon", "ASH plot"), system = system_choices()[1], show = FALSE, - title = "", data_text = expr_text(data)) + title = "", data_text = rlang::expr_text(data)) } \arguments{ \item{data}{a data frame containing the variables that might be used in the plot. diff --git a/vignettes/Resampling.Rnw b/vignettes/Resampling.Rnw index 8d74c5a9..163acd92 100644 --- a/vignettes/Resampling.Rnw +++ b/vignettes/Resampling.Rnw @@ -480,14 +480,6 @@ quantiles <- qdata(~ cor, c(.025, .975), data = Mustangs.cor.boot) quantiles @ -<>= -Mustangs.hist <- mutate(Mustangs.cor.boot, - colorval = cut(cor, c(-Inf, quantiles$quantile, Inf), - labels = c("Lower", "Middle", "Upper"))) -gf_histogram(~ cor, data = Mustangs.hist, fill = ~ colorval, n = 50) -confint(Mustangs.cor.boot) -@ - diff --git a/vignettes/figure/bwplot-1.pdf b/vignettes/figure/bwplot-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2647ae809ec9ffbb6a142789b65054868a883c8e GIT binary patch literal 5323 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 p@D#y|2yKKv*EcI7kqSV;eyNv{s&VnH}U`g literal 0 HcmV?d00001 diff --git a/vignettes/figure/coins-hist-1.pdf b/vignettes/figure/coins-hist-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e3f7939503d8e5b7b2c5ae48e12dbe4e88afc453 GIT binary patch literal 5060 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 literal 0 HcmV?d00001 diff --git a/vignettes/figure/densityplot-1.pdf b/vignettes/figure/densityplot-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..419c979d6b8c468c9e0ac4807a433c160f311d74 GIT binary patch literal 20903 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 literal 0 HcmV?d00001 diff --git a/vignettes/figure/pbinom-1.pdf b/vignettes/figure/pbinom-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f457630af109174930e01528b6d3df3479463689 GIT binary patch literal 6088 zcmb7|XH-*Zx5p6#BnU_s5eO)~1VTrO(yR1dB!&QykU$DWigb`RG(n0K5m1pqdT-LD zcMwE62m;cZ;!T`!X5M%1{cz7(Strl`>~?lO`J8&UzF>oMo#0Cuz z1BwDs_a6Y{6%~`_2Y~cY4*%yf6F3%u z_c8)%pdoI~a3}_-kHfm*uy{8EG|B-7g`o*g#YH4Vz$D!k0jKhM->J|Ilu^YW3c$1 zxdOa0imdcdwvtyqHr<=&7IJg_O{wk%quT3>bT{cJ+k%(`DzpLRnh}o%QcJcE>h~qR z2Vn6j8NE9VhhFj=nX7%2i+$F66Z7HX{+YhVJJW)D>#Z%;s~JOC9Ci(?3r-WfZ4(2H zt3R0b2Ig1qMT3B`L^ zo`T`E9*mAGGemPtU5SE3yaftYg$8=EMpNluQofXlaJ>b&tp>b@&?Vd>F0Ahp?lQA0 zip#2%%d(5qtC7AP5*bETo!anF#9eJTn_!-4X$gNG?oHBomywC~##0Ik<1E1~&0=2i zjnyFXQMpjkWiakT&Nv(?)oaUQK$}5zwZ(&BM=R%XiT}4x$dGo9tmlR4t%MTvC0Oh0R>_^7gm{ob zBQjgrl^D)xqgZW0BVL%yly4gx`n$M^9W&WtJp&0Ve15k@_^qjmt3RZ#Xi_`B*=~0^ zxZ#Fk2ls~+b9M8L!dJ0W-*$)Gl#?tmIM~Y9EdI1)S53-XlBsuga@JK~-0=$84^mJn zQ)REQgVX2k9e(SpvtC1rJc{!vG`|h02bHyJS$q2+q!yVyo|(;37ZAHpP$QA^ai^m) zVHZQPO7Ba$4J)P*F}`3d=)<$?MddLz z5tnq4EeK*GX4SB#l;Mv<=R>9Cxje1h%`Tki^j^)Bc_)0i^9}s_=G*c0i3xVf^y$)- zc*T>_#_f#9FK~q_a?!f(Q!Dd%k=9D?lVV=4#`f5?7o#1lgI2<3d%;3eNy#K{ct!Sad}1X7 zS+zPce$(#0scq)S@BTbm03Ro^^&_p7(*RA1jrLPI9r84zSK|puYjGasI*^LDeDbt4 z2hUiXwbL!47sV-FW%H{gtut{B$0n6`$7<9pf!XxniOQD_XO0`#_~DCe8&#ZffHb3R zI+Rv7y263XWY?dhi>FhE-Jqu=HM79vc^9dGcbrkMwBp-(6=D4^j`f1*7AG>Zi@O6atio7zH>rf2DzM)7M>B-BH&w;81XoR4427^*~@nTnx ztP$BbJN-pL<)(egKm?Nl?hQpKD2CWBCLxU?h%u+@RGEcL;w=w@zm(H;HM5}-u2KIo z3O$}wl`+p($}fHC^}3|$2~nNf0Klt?JT%IkX+UoQNskWYEAkWWr}3r65MgjEu&sklXlDuVtNd9r)1&*{fYjpzWAB9wSuRbrQrNa34(~NZdl6 z6B`t!Wj9p9Gbe9y5E9FHL9QbUL(L|roG|0^`*WyXb6LZ%N@paIIeq%DLucCHcIr{X zngy-Bi|OV{a~jaHA4x+ZsJxl7k*-Gdh9Xt6e0r%laxgA>2|h;RqU<DLJor-!Rc-$0WuSG8%SEEFTmJeE{3%) zR@k5FWoD#I)RKLaKgk2{#moLt&qxHk8GAl(Z3kG*9`{+#;6qqnDa7^{$PdL{};|9bbED#2CS^MPfbFak<#{PEeC0tpeXeHC#IWU~S^5W$FJr%r6lC!+F6hp0FLw{CuV$;7Vrjm{ z>Zh!frP^s7t0AS|R*HH2)>$u}A~Fw5iT$KF1XrO8TmlXhlN=L!1>agNNzaEoAK2fB z*}f-kZhWa&1~i5`HY4p2KX|-qD65lIfP6h_b$40rN0ef`@~QE}7v6pE2h^*d#ih0m z_5D12eYl3I=NvN7610lbq@V4heQJxdb{W=kFy~4QiHsjmlfP${mS=2O-#x#6PGZW! zsDtN~KmYpwBo_jh`~eQX$mI`U0qMXUFhFY{0aT2Dws@dH;qYK01_bHB9N-XTlo!xi z6#q<8RD$ra{Ri6+*yI5O8zqco2v*CA-6S1OGQN) zf`K^zr3hBGzetU6`t`nd2xx>PBmt?yJm63mAt>lBp1wf87)nxB>VIV@LQQ`$)U#wy z6XPkS@PP*D27`nvkx7Ft&PK$VR1KQ(A_8I*SG1esh`6LwP25xsRyQQWs+(s#NR6aklW zEEwij+aqG4ob1UjT>eT#f*_i6D=SlGI#wr6CH9?+Mx@doGdI*y15eHbMwFskh<;=x z)mUH$qGN_AV0^kGtqv# z*%$#zQd8~8*9Gb(S6Fw^N06o}huuETN;{@$J%2G(ll=I@G3{Wo1#uqdwcGyeM0^6Y zKnfoR!NF}m$_@>ZlfI~-)ThtR27=E0%&T?JyO?f1iiK*Zf~)Ba`@f`pvm%xN5~|vAH0IxC^R4W`=-@?5jyZMfSWe$#B`U62Ve# zSFwT6ISCnZk-#4Ni!&FDM5!|a_`d>rZ(j)s?YhEf6pjU|bX_kEwTNR~A|X|wHMpL1 ziCaZklbG@LMz+z*>#xJsa~#*K*Z8p4YKf>+s)%?Vb#P`Zph<FBL~kNBJHA z4ruk%U7q(1^{)|Oh2&VCMTw}JXQvOct(C3O?#rAqk_G2Lqs3ycKGMC;!&pXK#!|*Q z5-S_Z(h&{GFR^$dH-3F1lBym3_C7+a65w;iht7xeR;*v}jRmY*rOZ7W`MVKhZuHeG^>njWwxem<_rCV*z>d{@Y5XrK#b$Bx(MMDK9-^r%01?hf7*v6E&xiL8ou89Hj0bXkKzs6ApqW!^B7?~Koh4{8$fS|4UyGm0Bk zU$McVj7g0NzAheHdFlOfXH0wa!?`q6ztNG=s#l(`K8@UlKZS?5EIs%#BvZJ9 zrFM<&xxST=ARE3qGae$@Cvii<+<9x{`e4TR@c8b?`{CEaa=8a4>A!F0JbT@sau#y< zg4(oGPb0fbW%WfrGz`$17~lWWVP7mCD~bD#p7?_=vFU8(B}7anA~%cLAd7R9PdHUKRWw$hTW%kHg+C??iCiL3Qtsa9DcCb zwfR(2xau+Bhjc=AR!u`aM=~F9+;3`WoH!2-&JFI$>4OXpHH!_EjPH;|bpW8Qj?X-m zZ+XiWdC0Bok59E&e({|=VP?+PNz;ky$@T8oJKnpt8dI}ggSOeQ%|l+UQmtx08hP4! z#`*-Gkns=0l(6~iL<>*cPaIzvkv(ccp4N) zQsSSwn`qMJQ=EY-#P`7AWxZvQWiNU%QZ{X*xB+yMFqNsO(z$lfr7iiUDJ7k@0{kGB`o45M@)O7H5Ug1OYjbafi zg~kq4UtmQ@1>EHkU%7}7$hSts(N;g+Y$)w{$$|fdbrfTyTD!DVHR9!T#0S1fnQHh} z{%buB9WQQXogy7U?N6u`WaIIZKJzE{{5~XEHKpfNT zr41Nzs77~e%B_?y^#%}g!>XvaI;A>REH+cNFoTMUbw8Z;fo6=ko==hEX8wnXI`6vT zFFTVXW(B6^R!7KU`|ZAmO{e{2xnYrhPyJ-i*rn8^4Ob%QIWU66 zuP?T*PdH5&R^(Rr0=H}buBGRb*Q1e-9f(3yK~)Mnarn(}_DAW*n+L6T!hL>w8(Z$@ zbZqNNUXlBPe%)qPcI?S8_h#${yW%yk@~Y0ff<>R6?IVs61v8Azvey*FyT{Mzv+k~B zWhg$ut$+T!Gy-kVd5E9J6);7hdem3M;MCr#@4&OqM_-h@XAi!WQ1&y&+Bw*Msa{yAD)PTvw3$YTpuk3p!K6s|5S8 z?_a;hc>-w<=~vymF|Ed1wFPkQR3~#}|fX|`xk}+{#+QUA@RF8I1;}xBw*{`Cv!OR4iW?ZB>+IGa7RZNeoIJL z16l(mBtfolBn|_Vl>)irP*@lO=7!hJt0sie(?wZIl%F$FmMbIB!Wa?9bk??5c+44 zQ2Z2tKtTSXJL8Z}5H!ve0l{H`Ae0jd33I_`gZzw)A&|T6KQ^X6vHur{|FJUtITe76 zard!5H>d;=KW^NGxZ+E~4+=l~@`sHT#LZC^U&eh1emD9z{QsOE{vR>H|BR^#LwLZj za3}--`qgV7;aB?S*47IRa|DP2#lQg3zb>GZq@=hc&=L5T2F8yugbRrLOB0jA&sqPe zfyHI*j|E)>N;9vDWeI=!& z|4}m*4S^$IX#Bbz2r`C0gyDMt1Zg21QTU1Q=lEuXLScb~HTchdVXzQ1_Gh;wrKLpy L+}vvV>VW?Nb+n-J literal 0 HcmV?d00001 diff --git a/vignettes/figure/price-mileage-graph-1.pdf b/vignettes/figure/price-mileage-graph-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c66de356a8d247c2094f82e7437215c31e8daf8c GIT binary patch literal 5519 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 bXddg&d6CE{BKhaEsI!3p#KbOM)&cwv*U{aa literal 0 HcmV?d00001 diff --git a/vignettes/figure/unnamed-chunk-24-1.pdf b/vignettes/figure/unnamed-chunk-24-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31ae74fb588afbe58c53f607962a31190adf3108 GIT binary patch literal 6314 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 literal 0 HcmV?d00001 diff --git a/vignettes/figure/unnamed-chunk-25-1.pdf b/vignettes/figure/unnamed-chunk-25-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..69598a11f1bd531b283f0cb45c6a0a40f6e22cf6 GIT binary patch literal 25814 zcmZ_#by$?&7dVQlbc2Av&>#(xLpMlC$AF|X4Bf2~0!mAFw}69$q|)7t3@H-QAgPp| z&FA|&_ul88=ln76>{xr%UVH7e_q$#eZAB#>{wG4XETL!A~&Gp3%n{0w{yZdPzy zNl9E@1y5T`Z$~#*MN4m626jbp0X}{)J`p}qeo;O?enAdgUJW;!|JOc!M{j2^N|!;| z)6(6+(b|ha%g5W@#~TdO_H?uHv9|TR>lJ(geIfwb{-fn~*TjJ+1b~z%GUT!{~)&QT-{~x|Pfd5+^>b9=--VO``{GuX)47^H?&fY)-UL|Ls9YtGf zHyhhK#=X3O(p+%;b80%|CU`pHb46sntkJTD=R8q;%%ahjMCtGqb3Z5)A3vdWQ5Mod zfD(C~{3?Ii*wiFjbFGuW-hKQsukPZB?gFQ73OnrjaxwqnG(qOy&fJ$2gF&6^+gt0&DTvk;1?C zLP4)`(_t%{E{zA@rF;VN`_d)rI&QC~$1gf+F1EI@j3){Qokj=`ZdQzCR^kr}ey0a< z)K9GVcHR!IG|q(Ea~tW>yn70-i)f|~djIbumdf?yXxo`#_w_+i1EELGJQc^$_p6QT zSIaW_4ZbSBg=EOG&o0silv@`If2dw-mqhrNPH4rf{JWkWJQ{n+ULSJg@XE2g9piNB zQ{xEH(-qqT1&O12i=FF+_YH){JHLv5JiCG3QhuEK(5MPOAkKfCzDBGZ-ILNhGw@i# zhR2aUOV#>DaU$>6>Em{x_aEqSb!gU-cfZ`GO6xkwTy<_-4mD$07^}Mdi^yY^`SJ>- zoIdxdX2QLY0_TS#BCCs3egbe%eOZT zGtV^-i;@r`(vi=x|H*Q3^Q;bC%EP1c`2G1~pz0^(SccL^9(mvAqI|Woq9ng4|7$%7 zI?@ySQ7?O>65v?U{(C2oLwC;)|4W1J#N5ePS`)c%&~AGCDPB7nV6WMHAz)(prJc-r z1X&dRH2;EyRepy})P-hXX@c|A9#uc%LS8`NFBaq50PgP%G|x}}#HRX*%H7t{784u6H@@s_J&_8~?#4 zc;Fec%%!v$@6(l2myu^&GGcr`{7;hWQiI-342ySKmzK+HL~SF#9n4b7sKWv>U*xBlk23+R^Zj4rPUNSFZwMBrjr|7` zqtDQOFKzh+zqNiz{~ckYbAbqcMtA@8UHYGxgLR2VAEdT#zwlZT20GAMQ40r7COl;r zQ;;hCqBZ%9^_@a+_iw5LyhqVzYS9f1*G8S`O7PpO_)?wb39moX>Ve8r?`SZtWBdH_ zzP~pgX|_qfIHu(dnC9{uOL%fLb2F_bW%1pEDS4(y@Rl~J)q$>?^kuM$M8r!mvZ%D= z@loIW^1O|x7h7n|`z*1E>E_=Np22j+QLCZx7Q0ct!$F&eQID=lo0WZyn-yLTp5}$J zqjh)>64tbDIbHg$XUKHA((G2AJ7M@eQBeYP+EwZ zJgrLzzJB2+eH-~w-`8K)oczlqY0ZEsw$0&y>0VZFzEp5ofaZ5G zDh@vr!opT0R68`6RkuZ(NeoYkG1_2|FBBAWksVEWFf}OGG)Fn&H$I1!S0=^$N)7!n zmdOen|HXt!ZpF1~o$t>MTI_UpzSsQGfA86^%+n5*-}4xf%hIaO`Y1{O+0)nUIc4J@vWPll)J7aFtCD3DK zH1Cp;1ypN7?N;DItHUM)Rb7nY2{jnCy@r#|v&W9;iWh8ZNfv1KFPE+LiGKPOqah>a z6lgbQq%8F<&TbB?Y59Ee$a)I}64J#*KXt@}+2JneTbCAm8bswaL_~YOmN>3pRDLbG z^R2PvF(P_5A9ogA?Tx5h_{UJZ zmEBeK5(Y&BUQFbwR%8KIhMMLRM;VUa{?*|eejfMRH*4Z`T&OIunCM@u>{24X$s9@qaS|ME(-_Ux&kTk2h}G2i&~#ZrGl{#v1Z@0TL3)u~AAZWoz%yTOc*?s|RS07yj4s*SMo3j? zQco#$0h=yyUJ6A5;Jr&zQTeO>LkYGPD__27j&1*HI~qf*T!**W8O>Q_LMN~R6WUP| z9^CqNWDz8-S$t*p#R^=Hn67pHg+7r|5s4oY@`a2D7&Si;okrMw@iStdowdjE5D zIQ-)xbvv@_=2t;MD!p(O;6Hl7nMsdy;3E%g-_~1%6EicoVABW>NOqCBNN~Xolx~(J9vP!JM+ksU`iiCyZhFYeKVl_cEC=?14B!hk)`OjxLXdcGdpxHJ0+!U^lR$ZEm zKz6koltU!kFx<#<Ei4Zdmg$)rpO>47XQVlhT_ z)ffdiDk+bmfdG(ri zI%a1uffg#0r<#o41}ZLk-S#?c^c@!|I#Rj+y>BkEFcPTZ*(_^@bBIVZl`fsZcrZ$v zi-L>=sHBA5xG?Z(|m9WlPHg_M2@Sz zfTz;pReN4Ac|8#)^?I_~o8~o@l;JfMh4PwidsvB?H<^k^Jxwwtii3|Q66wa}!Hvc{ z^aw^;{HlJ4{T@HE!=BWO!@qA_MM5@v(uRA#9tZdSN!vU^>!paoYql?K0^bG!%&!eU z5e2%~t@F1v#7#6dgW>nvr4i(;wY$T5F(;U9->Q>{H`!eEpYZ5!0@(HkmY(2`4r`wP3JU7W zi#cc{YY<%3kjsXDZK{i{@%#=f`*n*sm5FV9_wKHd(JFGMCRW(j*4b7}Up%gAQ+wwO zM%7(c8{hZg@6%$45xWVM$tL{kyjVFz3%=R%K9T;yRCSODi$civrRZnR`g)vXJP21d zUrPa^9w+A6Bf;#Cp9}a;dt$iQ1ZCR2HXq+T&=1B?oXvYgx&(ih!dKuM6S)WjJG>5* z*L^mbrFruaBEKrj%O7%3rI-F2YC11b75ysE*n@-1AEqC7|M#%uG1`o3d|~_6*=>Z# zexSRtrVyi=O(q8qc7uTx2jA)+gPg%ys+uBU5By&Gdxa9x+1olJTT0qvl^SQtxr>{3 zM{S;$rOHZwR4UGDGv>0cUixaTRJ?G?CKy<)sr*r(Y1foM^pZ?JJi(?PmYe)F6=Cqi z@Cg`~6I&Bo6ZlsNjN{55*}f|RLm=L!uY;+SByA#Ssa*iI!z=D^mPv0^@SKwnMgTyhAEw^ZlxlS zJyf%}5F}fNfkP13j$P{%cXJlG^2E0;-j$EbLAia#56GX%wR8yRP8LC!K`k{2^r>lq zrfEF@{xP2|4(^Imqw03P@oOB#`8(lTiO$&azdqEivoHq2%Mh>H1goX`sYn+}?HcCf zIUz0>@W{G4JZ;ddCNnIj%{U1ziZNBCe)#;TfipSiTju>1N|W50X6K`QKQ>qXCh=?U z%6>o@Y19&v4(G<*t?Vy@NFh#+wd=HI1dj*;T zVezOwsXg^l&*E}W8oh8Y0eSy5T#=u0l5hoRy zO@NPXT#}mR;dH!n_psCwSVM7n8Yr^a)7>)2?$Fr9G|wGw>FaEODLW3|?ngbv~`in8Cy(Iz*z{XJHUSo^B)Jz3HA@If316<)8PY&$A|;p)mOs`fuSZCS0BG|4S)Xip!QMr&%{}jB;LXw7 zTxFI%5&HiBlv~Sh-6zBy*hGMAfHv3cC+*P-gu_5}+j!xeyfqIvs4 z4Axucfr4yincUtf2fdyzTn0@nB>vd%ix)Z<~V6`PNM>f_;5mjB%-FD3z(bEfo$ms~KVAgc2&9}T6oMQ#C>ulV4hdbj2vuc%^hg9te1Ri6*IKA5 z*K75zXVMzTdtx-(RjicPivlFl?m9D*>NT*i?9IiQzhmd)J(k>@GwNB&Ud0=12*m&RydQR?~H>v>_E-L zEWn44Kb0B4CeN!aI_e9e1F|W7t!9qZ8QLyj3K}W^V*w`!;NRHjx&G6134}SDud;s- zQxkVLz(*%8O~VM-7p5z2;0ahu8Nr8xrY}aNh!`pSx1c{C%&bOuh6YV5<++;&)qF2Z zi%_?LQ19F9=hV6N>Pu+lyX<%Dk7Z6NDf*nekK0Jpj3OUUILOI%Q>VDlB#mw99VbPn z?n)8J7qP0$B|VNK6_eQdL7gfp8$Awyc1U9@b*oakAV(TW5`Q?IGhcx<5u!0=4*fRRWuqHT@y80kW`?#u5{>$(`{}D#M5Zy;IHMw5*n^N!_tRT1 z?7X>0jo*kKDP%s0rGMf?9PojEHexkX8Oq2o=;I?#php`2 zZ20_VEXVJjUn0!oxh#Uj32V-_hNQx?+wJc(p62$T%WFHyR~&D{6@v1Wqfc`eNhOH< zcXuU34f8a|!Z%hk;^{Bz0X&Z4KJ*>pp- ztt)Uy?Vm?ML<2I;y~yF-W@f~*vtKcwS&+|DE6Ro<<1;_K&<7ek4Jfxob*ih6GzbX` zX>*=MTes;MN{k=$lgVqJ^?Jd@(nCW;5W+%rBJ9v1If!}^?QLNm$TpSBW&Z)|a_(4tOxE#}T z)-H{D@i+Y~23+xqYFfC>76akhA*P3HTwygD9N!FzJv=UVwFscl74Ak6c!aZ(04T*g z+==nGl8-ulQn$L(YxBZ?6prKM;3q7KZ8`Wajf>g$C?t>{w#X-tuN9H+=Db}8{awL9 zZ|JH6Vs~++U`7q*Vr_lzFHXgN5=KBSjVy=1+`$%;*Nc%3^ePBrkxT=qQ}&PY!dN;3 zp7S*5s^WnO7%y{rEn2UP=QiubPy|L#vcnl0OgpKQrah@_a^g&$gvS~=w%`lI5A&qU zj&v7i>Z=abbfUe6XCvQkS>+juIoYVUa z8E;H#Vwlhjfv7~6eVcsj-cvzH@VHmc$$`Oz5?L79@S`RY^PzkdR47q67M^GDpyq{Af*T0Ctja0GxYSL3~LXsUJ9ubgiUY&ZBBcu%K1 za$;3=kt&}_`0M2-p*CqMS@uZM)&*^XsEaDgv6r@{%dNm`@Hr>*T@VYmsz;5U z5tO`dq-VWiy_y)!BFRh@hW@r2UzlBLV{FPY>2WUTocYG5;0$e!q=GMw)mRE^uQ@tp z{MUycq%C*~JrUX(4JO$5EeB|ZLo^I&!?J3{XJ6!Wf9MI=0ZYUfyh=QnMI-CPkd<8TJ)!J=i5HGBj0%N zwGn=LBZl-zvu!AY{E=?aJN3<*%h4+yuYV7#2&J}dG97yrb(;h6iLS9@b+}iEIft9^ zO3DjIJh{;x)OE(W=#56(e$JxBJfF{@q7^I-)|C1vY9m%oXCxzRX?Gl{?wp@Y4OMxk ztbwSht~=5D6quKtlZDLRzrH_2g=RZUJ;vUr0?`_{?*5xB*xWvbB`c&+WY*mfK}Ou z6GKy0ZC>7b8sV!1!V>whUl)( zGU&HYYU?|4nmh14m=WM~<0F|7VzrblOPd6X)lnc8;2q*C;v5p9QtE}xoOxT{TEd^+ z_C;R&oQXrhv+@p8&#_N;%%3MF;)V0pGg(S6b3J<~t!pi-J#O=&xxDBtX0>#bDZcaH z(e8V)`cF-D*Zr#*CEj{}5wl?` z9a?4hsoI)7VzAvRRhO2Vpo-mAA0RftJ}C2m!nIe&F=>iJ zjx<`8=jA*h>K7nN44%3<#42z021@l{d5tK1_Uhv zIcgj#ThVoY>6jl@%0P$>2V^m^+@l_R@JqsmI#8KQuI%c_FgIl-T(#IfpJR~&4pjh; z_>Eb)xAck{qn5HWl>S_hkbYG8Hnte&^gqxAi*5Ey;l?kMBqn2^8Rg6QV7J0v5Wrbg zR~|&hU#(WD2YoE=P-xx-z6pi~_g;p}YR}Z%Im6V#4zaxB;4$TODy{FqLV3r|k!!{A zdfZ8w{Ibf9X3M(=C=`{k?+49~RqAV3Z%0$bK5N(e?ZWV&K?=b}GuR?(OSuribfIH4tpFE*-DjucAQbKg63j^6WWsMBtvkII#9fE^$@6lnavh@9o zPfydl&|LLvztyZ*ur+i{d-MyH#p3^b$L~e^*_xFqliB-YA+~UFQ~YxWcK9B*K;9-a zRJ+Fq>~NP{AIJa9*1bk?lJ)w)AamyG_Law#T?r`8GEAA6IIUaU55lz>waiVpecrj} z{pBw)dSTorz)fUrJZboyw1gp-u#s1^zVLY`x`yeDt76|jD-cPmmHrMOJobUn8TQVR zm^|Hn{^G#HWzYK&J&_b%bd8aEf@pz~%3-Ap-N{EV&gSxYsHDv$P|jLcJY=KL|6}on zWrUpo=n_f}l}>s?OsLt={Om9SV&+LPs}d7|;*@`cLuE=*uadO6G{aOFY{724k5a~a z8UwUu!}2VGkGmNhQxbL^H+Reb-KzXJ{!V;s;kktrD9>+ol3x|Lji>35M9sTS~wvL3)!v@ z5C)&~$ZV)1n~H!fX|K*(ewGilk9v-GpzcH2;jZycn@;!54H2DNsc3^WnmAdMuRd3T z%O`xd zO3^jlXRBW~-<))c(^zHD(R>~OjYbvt2LV34Fw3jBkAqZY-?5)^DeyZ3S>9Pnc*2=u z+UaN<-2N&_NHp#AU_w3D-eoE|gnwYJ5mC>hb!z{RmHqj3ntyB+(^5Q&Gcu2PRv@8p z3%hSrVbLC_k-h7KHRREP#$HCr)6Tv1)ksJoky}NV0BVIC%C0oZX})CszuIh_H)ls57XeeAh7T#tXOoB?AQ`rAG~|g+elp`W>!- z)t3=rEnIK+kisReenmhMfY=6U*61gV9b}SHX+x<8iGcmRnMUiaTpOkFy>B8qN!k2;DpRC<{;hegqLnvG^b^Zf5A?YOsz$7hvgXrD#_S9K;{66YN&Jtbz$G;cOr99)I z0_270-S?eH6JBcf!;A?iE22oAi`=dr!$1RNhj!o(SzK2Kj~9GR(=WGQ`@~6J6ABe9 zv=#KvMv2T~hxjWHmmi~TEy}l*q8X^JO_2_xcBe>jEl2|d=&gQdCLDniF*U~W!X23 zZz-`;OvUoiEK{6{0~9;?+*PaRNyYDl)t*g-77KQQOi6~O6PCR=)NuOCkQAlgr55yn0laKCjE%)N(Yd@T z`|{Y3yInuAAoSvAUBa@-T1mW^YTyARDm*T9Cur@%r& z*8skm!FQioZmYx3ID#s==B%~3|2M(MmA!YELixzD$}{<^#YvMo#GWdOUXnKKFE-3@zM_rH*1jpe|LVsu79FsLOfi*zm&#%nE%WWu`adGZ zDC(f$jGPa%&(va=rM#+bp2&uPn+uhp*ARv81lYUq7qW3rSlAX8&&_W#6hG={z zX!t$l$2RMKwu}R%3-ObmEC#6}S*en*{k3+#`H7epwVp4p*Q9W{0*zNPL{4wl&UygS z!}$C_ujFDq!;wx;$CWy3e0JM{&Gu&fPD5(04x=abOo$-B`TX|hs+pr2CvUA+!xuxk zLJR>GRn|xr=7|T%vJL5$m4&||ouCuikmb}ctKdtQPI+Q%sQPy^hq|4%eN^F*YiC~C z1TR=;#`%Rpty~s;0P>SQ4slp(=VGA}q2NuF{iQ0y?4TtkN#0TPJ$daJKLYp$IHqoj ztHV{6{bu+S%3HqS#MSjc2?S|keQdiat+?nRcEQZG53TWgzWNX&fzIm>37pz%y(%Ng zUl=aL@;5;QEGSWVrCiyd2=S?C-M#!d6%O!LSUW?7cJG+Awgx_M!-4(#mO?QhYuJ&F zW<&vv&)}bv4_-KmL1y25u!nV`Oa%;I#`8B#UzK#dZ2iVYAc0p~e7_$BAN<_q+Lp!@ zhd?HJ^k7C21*kf|`V8ZZL!^2J;oG~IV!45?NrnhLuiPH!{?uoISFwoHZ^8uQv#HoN zqQo2G;V+VCv%`rsmy|V|LDzHyK1+`oSAOJBIMF58BE)|Th_VzOT(Z@YwE4t=B+5O6}Q)NM`31sDZUJ(v}jjxobv9LF#V^Pv&ph z6^LbzJ2ZX`?T48uc-swR&1QhOsz0KD5&CGBQrEh$LxIPbSjfAY02(>FYSQNw&BWxz zqA@@G`(1gijdN+Ai2_r@-iHRDHRIaC;Cv^ZIbzRNfe*0=gE=807HLx)L%`XHb1eu2 zn?1p0C5%um!PO@gKJ$S{Y@>Fc8;GdD5_#h_C;pMY2@XN1RJd=tQcd%ij&uXYD@`N& zaOXG?06izda=FK+b5T3GFLm1%%%+1gd)fBzwE);+6@>d?YG{HsRogtrSXdU2Iun8l zlDi{HtqB!+3pgtD_;4u)dEK)%8);m11_EoKWgt=ohVfOUYpn$U9UQwzWAWNe2L(rO zH_tN=5YR})KW&4R#~}yEZ8rLoj`QHrzyr@K(mbKyIpT;lz_9Okj<-%!(@=EQgqdJ^AmJtVQ&r^3-BN*a+ zrDOBz99@Dv&6G295UH?rN76rBq#_GWcPFui6(NmUFRcda+QvX-D9)?tK#@WDekD|Fj?R&8hi(6MKhtr#nHjW>m47|xj+`&}v zmI$76mj$^Ob!Z&qYOm`AQOx?!u7Fd?U6fO7;sRV)%}PA+Uiy^PK0IzQi<9QW^uDqV}IaYw486^Y|QsEW$TpR$McGA8cioUE#;0hEvdn zs6IHhb$MhV^*g#qOfr4xX-cPD_NKlHEqZsxdU?*+p|kxG8hJ}hrt7H?m-wFgz=xxS zk)0lFVa+wlXvZ;*TVY-Cm2h-s<`G>xED7`}UQtb&nW@J`9c2Fu%ua%E>* z6V2XF)-!Kk)buwjt^xGq!ZhVa8ri(2%=N+a+Pxq<@t&8}Pz_u% z%p}RyzRjG5wY;`lsPyQCm2txcS{~2z6Hpwgr%KTvQh8b^^~FAx4&WkEIX00%RZTuX zRT@+uO)G>BPTUP<(&)HSto{eEW5Z;qr?FFiCo9$ldz`Cy^ESJ$-NHjpfS8Bz33j%p z6D=auF=|j}d?E!t^2T8%G70F&c18R>qlPj=%RSd;TF-3;vhF08wgoacw#HWtl`XT> z{>ZNPy&L*zNC&bEd(tgx#bpvW3|w@>?_L*dy?1rYO;)qALKRa!_6k95hro@|i|?0Y zoP^#DDt?zOP-dMSkIPmT!gY9*aZy8a*;=+?36!?bzt;JlBOL{>HdOcVaO%Mk#X_x) z$uVtaO=tLPtiqe^1+O)v!Y99_MD06NR*uFLr>mDM(@Ht(O)$J9%x>A(25hR1EGac` z%ti9|WF&19rzAX9D_)#sejDntAnhedR_0Z?#0F)Nl(6FJuX?L(y*rL~klT712GP?% zX)}9o5y%y?I#+ZhMgrZ zKiaWGlPh&3O&-#Jbm@&%g~+@R%1pO?p5MvuG{Pk1%n&WS*)Mp1v_4RZI4ljFYIb#I zOkHpW(_z&nlOsv`&KBs0Q-o{(kg&~WJQSK*;gG|FN1*dmkUVT)V1MiY)^S1H#fhbT zXTBpZ6o7l%fWSAi36^Q(ptcH5fn{jRQ=hEGc5E?=9oJJYJt&L>(Kd^OX!J+Y`5!Pk zsDR5sAq;h2D0!Y0=Lg3g5$*fa-ilI`CXW9^01x`5oZ3H^8fd|>>*V%b+)zi^@(*wt zTt5i4{!})$_O-tK4L6!K7kN7__n++XZY*mq7Z$=%G9($x2_JRMk5ZJc6~83=4~E+c~M4i2ux$aw7HY_0TvSJ%dmnK*x!!hOt*B2~8NEOYUiOM9V04Q=o># z4mc{096w-WAH#0S81sVBgAI9t4tNSq3*x({!y^!&Ja{vps^0di3pH$Oa5t+Q^nWro zpD_?&qPJ{-_bpJcKd`ot!ZS8BD=go)F$_NTlOsr8io3|#sJEUOe6gKH*o_YK^czc! zJ)4scolaziKNBe6NM8n3sI))>0w={DX3d}VVjuOFSRO;reTG1|%rZB*@}z|j+PWb= zyZxS;c$P(^Kq-Cc?S=1GpPVXifz8K& z-kd3h{iZqxZYWMd3-?27E?aJNR^zf0GB8Cr_>z}eI1?Grxm9($;2nK+b=W4&hr)8l>fzDQkmk-@PRK^6Sp5WoPr%8Xjg9- z9incZ9)?IA);<+2=ST>Pk{YwA)25tEfstV2Yn+RKu6phVLy2}-7ko{+(@(*}LnhA- zO8b88x#6c+j|VJB4GyYMqZR#mW=azd1!ir7WqmFQN|T+}@nw)p5KE2j=yr z5e=F?YBL6)+L#lSoWyg;jkfrcp&<79WE_gYqIalV@U^v4+H!v%CFClKYMjHN^BBk!Oa16pJ%AY~BC7jAbxfIjbZDuH9!wQ*mP<;B-5 z+52^^ieu~X$A?aw?;e80l(2_JC$^X>ObZevm=eA!aRg9@JyvV35e(J5PLa*(U(TJC z#_J%KOm>o-a~rn%QTb{lz4AdJCeIH=9H?IDzz~Y_`?S|2m_Pk7{DE!{c;yEn zl+%Et&pPNbPp+^+Q3wsVdWBripe}ydLw?dlb@c_+2#5yU89T6~AFSNiWDu=8vo;~Q zE$#($NUk0MWX%9+sb9f}ud_Aourc&|+sZ1&bZWO0{W;njQ4O>jB zOT%z2m=#qru)p`bu_tA;CyOqvP6qzrkEJ-{U?4-8e*W8JW%XPpaIZL;|F-*e*?I)2 za*q02SwQujm!@-8HX$`gkX9qjimlOiwzoQ3Nr4Jcne5oCDZ*ZJymerD^Ho37UZ82Z zrSI(qI<@0dHfyd@N)0kIk<{bN!6ZIg8jy9(StaAKGUol$L!e1ldRoy^c7)>KL7|dL z9FANAg7oQ}#=IIJw~H~BM@u~o2VN4E9aaL;5od9Sgv;d1K%YRa(aL~Q*3uA4jg9{~ zWH1G*uUoE+sRDFO7a4gEp16FCV|lCoT$kI(Cb0b82vz3$GNb*$6J%FhX`(tyf)V>r zif*5PS{m;oSMGY7;g420tTUn7j~oP8OcBA!n@)|87>Rk6@X=|lGH>ojkpf7V)jYeN z@1q#C%<;7PjTDaOF&LHVZ!(N(ha>j|)r&Y%V@hkC2cxa z)UbDCdsmx%GRA6M&A1o0Q_FGdY*po~(7yyisto42Id4KgpgzxqGodQSQIc@72#{Ga zT_LSI4FdK53IgD54oi4g$>X?PW|o9z-GxO(XD4w&NfHW^PVZKPRUQY2E0d%M?IXKJ zDZTimyR`6QYqPX`pxtew%?bSyCo6;A6m1b;L4m&%L$PQ0H-Nf#d`V;E%N|&e;;EJG zw}FP#D7GpiGR2_u6mKAx9JItnJ253k+gfet?S&@CP<*bgr(7Hd3&ny&=|Cr_$?Ry<>qAa)@5VFl= z6UI~Dc>@e2vocRbPFJ8JG9}i)U7jF)oD}}q+njg_h=MZ?(Nw!YH@ukoM-c_y{HRVLTAlpZnpRVMp!SEXY!^lv zb+0pHYdVwQDqFHa8sb_N{3WO093jqocTX=D$H?MWjV-tH`r|)WGs0+~H9PpHb<9B;__+e|#sNk}crJBGOl;RZ%%hsV1yvLI8+Murb0Z&NKXeOxl5zM+1p_7PHh`D@h1#FgVmJ|yx%Il!NPEyoyHXegW)g7RCM2%Mjt{`wL z_-Biv!$`v-jfD#PwPSuh0iOyOH{AU=R5S{7G{E+ea=tl_I9tYBybqYH4Gw@9w0d^# zmocDErSfVOs~L8JFD@A4IHj(;VM#k?ZZQZX1+a)uK+LMEddaxmr&Wa@GYJkS0ro=y z>_-;dBgSmkNUOLZXJsMCv+JalT_%j@OmXn5TNSr+IS4WbQ!%jmzX#ED#m^56(iog6IJ|Zs^VoLct?xos88P*eTS+t^uKOp0+6CD)}!v` zb4*^MD~Z=4QpSvP#~od96~(_}DT^{Ry#G`EoxwfJ&qr$ybPv{7tfCuvrIHqS3&Kld z`d>>$=zvLOF!A?{i#R+uH`M)U7XdVFp>1lV6!Y-*4R95Kf+JSWrGgZAV(%~jV=q7K zqhj=n*$5j%%IVo#%@g60Z-qJK<8pGqyNMr!oeW3R;FPivfk=&i$xUX)8-1bKm`;1$ zg#j&FXk%9)Sn6O}$o3-t&rq_655_9-9)83F!(0F7J_MJ|aX z!Ehln``522_rw$fYhgrn>SevP7~X=Yv|eIZV37>@l=*lPfaJxmI>w$d*9)?*0~eEH z7Ftg$Ea86_Fhpkgpsy4NG&BFeXT$V+9-36E$T1^i$T=$T{JKIfJmnif2C`V;0uL~R zhV;|w<^Sd}#{wi6Tc{Kd?|i%aZbzsp$Mx8(xhz~0q~(g}58q`CsjS&B0Q~BGVO~RZT&G)kM=K9-sg|MRMS^ zcWtvDFfW1Z5(HMq=qq%{xgn9kfz`c9N~xqRQqv}8Kn;TjcXo*GVcx9#-}s(9Q9>X-1?r=fA74FJA>t*AKr~cYHv-Nm;ov@fC_Q1 z*pH?=J2clMxqNcsR?@si=3x@ZrAg9Us?!mD;rVXRu!y1rlBVM3lLW{A@dV(bV*bAP z_YR+|>of4F5&&jsE^WSAb<&TDKX>VcVNhsy90yj1o#G{}3!R;W#obi6Ig^pe*L@Dn zL)9=LKlV;>fxP}dki{@yd{=r&VOj1J_)Wh_#=}VA?r`vKCS*Mf@+|jLI}-Fa>>d4sy?~uNW z7Gm1BP=k4TQqiS)q@;>)TLQ+wkMs$8#TZYGPm8_G-ugE#E=*k%&$l66Z%yixwTx(m z5`}S}*(7R(H3uUXF4@gasU1%GGcH^V_>|MFxRXE(U}yOvnsnqj7$O*zd%nSp@i2l8 zS)01MmDKZau|fr^WOYPdyjlP;+Xi2J2o)NX6tGPx_dVw;P}1!4U_GX0L*E>wiJ}LN zO-#^Y9zjtUS-t05C;El>>0DGinj2tUr8w)<7w8cPxL>@+4XQK#|7)J{r(t@cBB#X^ zx7%lsNSmE}ldE(dP8#O<{>#jN{)GvBGw0QRc9>ep=BOWf8!&Cch<;BAxGP{_Ob=GU z1ip#B_Zb)1w@pwGlf(rR(&6nHjG}`H>Hl!2=7~H(1Q8ba9}hc&MYFy(PgEkGLZ9T+ zB?jM&HMff5O;-?7D9Hs@TY~8Xm3T%|3;+#2z535U8h}TPfh7Sy0#Gtm9NkrQ5|tWx z3k@R*#$O&f>hsoy2~|l&d}8P@@UtWL`4ssluK2Fd)NhdsX=1IRXt6dIUf{9kQd zcOcaN|5tr9sAQbga49A0oDh{{rc{V?_UO#QnUO-7b;c)6N=9VdCE27SMOs!U;*-%J zl4NH7p0D@OXMBJDxb9x}n$PFs@pwL8*WK&oY&5+k0Uq1=p9#c3pDEhrPb?t>i#9v$ zMAe&}VqxG$=s*E^?$QT(ygPrIfvbifG$I^}mgzwM<}syXwa0p9)OD#Xo6xBKMGX?) zVTJWP_u)}sb6@;LAORB}-OsBIzxsoWPzH@E!i$y~X+&A+s|LZAUTLkC+fr=`I_|7a z&`I@=9SjI9!!ui|$@<0&CBLZtUD}ltBY}@<$>fg5@#yva;48uEN}Tt>CVoA`#+^>M ztmQ#`pqM2bigaSA!GmI&3svBI@KXtZZ~^?-@O4Z;sDW%EO`qc0Eu(ZmD>K))ryu7C zO8%B_N}xySlv;srm^;oTRh0cS1~fm3V{3T72Rk4-j9Pi{uP!R)Ozk=g{XywTBS4?W z1Z^19e;pvCj?eSo76{XG&osVB?<*5;N`fP|t@D-VIR;=COgs_O_FzGj!a zexr?KI@79v#`g)~8Z9%@B}WX}jM7|&bf7zc3_`F9t9vx!5p2W+YbWU8QIiz2Wd*Fx zUu$L03B7!P8X5JWA97Nyc41_Q5MmD0H+GX zr=oW}(AVF{gq|1>cW$KJ#E9Rb1<-tnqo=p__W;{{Ko&Kj3eXT()8%Pw=yFXE+9Mvq zpzq3W9!DHS8OaeO?>-(l2mCSK`#&@AhTaU#PjhYtQ;E@ z(pdBYG^eE+kX3!H9@(b66=!al06mq+yvJdA{T*^zay+0HEMUMynDF2(RK;SbPopG~ z3k#1yJ>eEKDFhaQ9V;n$#jwI`gdz}wjYvdN(MrHD4P2Ve19pW5Yu z+bDQ(060gkRFSA7RIQqdz2?cVe)0qjX_r;(U}2RrOt3|=F1QSc zdX`_mDlZw<(Vhv>mfjeKz=%e`7>{YQlpstcK~D?PH{VJHiTlB2WCe~fQT8x*ATeOf9dZ~H2ui;;k>SlU(0AY#L;@*5 z!J5?aH(1QP0~3SJ78CK>3EE*IVq5+nwz3>s1(aY6gqna>&vaTsz_G@dVHq2Kels*Od^S*%^#n z|)Eg_V1A}R?$ce_tDg)X<^Bnzn72D7z6sD(6`9J{~Gx?Uk92B zFY|CN=?={JZ~9@VAT?w{ua;@aXp;hL!1!bXI( z7{QO|YSii|wMcl|5m{l8B1xj2?(^TGy+kn+O&a=hrGfc_X$mbOB<(| z3SUStbYUeqtT0+V8zzYY$b&JO!2?xXR`{yF8ID{6sSH|)7AXXt!vpQtorP&Kd*+_p zW~Dda)Ni1z2q`!Q{4D>ld7*Tw1iVyYDGJ!g3CBn#wV1Hn!wsPclq0l^WkLYy??oL4 zd%?y}IHG5wl#GQSh;xOFaQ!H98EQzJR zN(|wAdM+JCO@^H#hKh|4g|T=n}ME#>@^UmLfu(W91tpt(gtv8*S%l|mZ>OYh4Es%E(+Q{tfU8} zk%H`??O-H41Mn2kz`*AqT-`hI8XWtA}c%smZMzNSS_DUJb8vp z+QMwPg5I?92Pt7 zFlKKwA3jGCFM>}(P%MVp|L~(R@=i~&Fp6*Dt!79WPJ!8?4PpnQQ3i(*3xpkpLeLUm z2s03fECEChC#5rCqDq`aRz!~R43_+#PL%P7#lk!iP#cz7fEa9s{w1793dYE=&`$;X z8X+VXu0{!fAG8#|1ljPY{uK~c7DXB1o78Y`!5?(tui2qx^xTRTeHSb_tOc+$$qDRD z=4(;}Fn0qlz&TQ=oq@Ztf&+g^eX{Q&Nfeo-I%qGCA12}oQ zFh!t%9!>(F{iJIb&`8l3M(>@t_x?juZtV7&5UqC=#PUn)aJI7m=hoGgS;{eO3(ATh9-_v!4Cc zIm@V+`&FhozdK@ls(zv~Xs#@1YK%OuJMXL-H1nsb$@$a!f|lgpS$nx=ZZacjzT4uL zNYLEmpA~bxsy%PvXwcHC+nr-UZNA$jMt_zKT8sN`5!q8Q9m{aDO`55-hHr-s2r`kFJ> z*|OI$J3xwW_F(hr{%NiXvyW;|9!WiVx4k&oM`hS+V}{0%Pj~Osyxy{R`jSOkvIIi9 z2%A*6>O?xJbDt@S?yGwPM+hQ$;y?7ur{)E7=Lc6zzi9tD^hPzC6#MCml4-O;|CXQg zGdW^&oLkTSH6Ao|`R#+Oeslh=q51BlxtWStk@ zjzuTKvQBPYJUW(jVk|+|+0F}Zjz=fO9>ZJ0iLz85I2o3RCmgZ2bGB8d`r*xG;XOGe zB|K41(efXM%c8?!SzTgh*isDbz47J*I7Jsmu=n$}!6C&>J11yLT_@4u*80dK$XhQm_(&*RccYc!kC4e;;OxiqLrGgo7Fy>b73?c6dcp z%X0B}T=Z&jjcVvPS~oNZLDT+}GsPZtN;nEf-VzoMu2oQ0{D04_MRQs(o?pW4>%K;Y zZTu1S%w0_V%j;-Y8%{bMTdK2$sS_(BL0q-&(Bn&NqKcYE?wSU%=_}>LyUwL*#O8|9 z!j>514*Vgc+3exYxBmJ;yKJG(N2iBsZ*_`H1fEP{*8k-=6!7*T+ohQh_9ur;R-Id& zV#3$mTYVuq($QwclGQ)hmbtKXx##Dr^G|9ojbD1UHOeKPcT#})a4r7Vv_z9?R3+Pd z($!K^Q6iguTvYGR$u=@%kxces(t375@NCVvAhgZGFg*GSZ)A6U{gK|t z>esSscSUdMA-2W~nQrLzWOJyWG37h$DwHR>r&UQ=N!C@`wOqV8$a3b^<%v_*twMvo z3u%f>J{>0q#;;*}kZxbtHWlIOjAOGLSfXDx8&PXRV58-g`>YM{*!1wM)v>A`DMv|0 zM~8*(lBAP62z^6SNo#{Ntk2dTEB|Zgv#sCA6{XAGL=CH5ZVvwGnpMy1dfb1l{*n|i zDY9bDXA?j7%+~S?gsWPbuhI|W4__}df6jY>JzhP0|76n5Nv@}JX>Fy~FTS7TZn$o; z^zLTi{ehd<#3i`#tIpU-HVg%DK0C1NS8ZfteBABn`rx?$a>?Pj=lolPVkieRb~8aFuXwAmz`brJyh@MjV^8z4%PD++~?MD z@4gc$%gz5pTRqlq>niTej7vOeOP%+>zqBb$q?D!;oAKP7Z@HEhQUCB&&X*#%u%0{D zQ;bs-Q|SgP^lxYGYbG^|pWqndKB9f{PHkgdADg$-ZlT+eGTP+iTMZlg^82_)m8NjZ zLsBSF#2CS#!yC5Y@|Wfd<*#pwQ4SM&7G;~BYjSV*+YJM>HPxOEj=KGX=S+2m9sxe8M z#d)Jv-4E4Km#~#ix!jb%c&uLNT+FUAFuQA%>TUEj{7r!zsZCqiNLk}_zGvi5_Rk0S zq^d9UXmlIU#HYm_#VJOibUk~+(q^A#?S9jKr8OEm)7cx2Io~ayI)xPMz|m;84;36r zJQV%X1Gi&i%KFA-eP2iArfjEtruLAeNqVI6{%tLaEt2${mM@v7GlyFaHNS7sZvK$9 zvpJx-sku1IH>jx)L~qC2P=#9gE%Ici?@b#T z65hUf`?Klg8~U5wsbfaB?hmHirZY9BL&wwBl4_0|NY2;jO{=4Xb3DBgTbF4!N=)}w z@R{`ydpPzmLXZ{BMVg7^u6Qir9q-M9yZk%FH87|+weDiYl<=M-N*9?bCJ>`39 z89p1H6CD+OJW5f}M@U7^c;{N#x?OGxA zi45X;xro}0ui3wp)ka7+@E_$@k6a$P{xDC|mH4MF_AzE}q(h`RrOTv}OodFU&0X{R zi>I7iskhz!atf#kKhEo9=+s0RVPwZkzbkq+{@&uJMQ16a_f&m=o1Tugvea~s->{GkHjJ|EFH2rqA^_PG^ zy6#Qg$XBVSpN&k82=_*p_Lq8E3|QWETV1SK%yc{EYv~(vCS-aUR{&Syfh#qk8Cj0> zUbT8htG8C7Icsy?xj2p=8s9;!YOgP=I@1u*!~5BA(5sVNzpJgd#rI|X2WnX7j-Y~| zOY@5J>z9}<={Wc0T-N@Y$JfpWsHG*dtF@?c1=j{^RjO=u*Rgp%eyMC^O)qD!Z&+}{ zxrV`%i6>D{uZIPQ#H`}t%vlvAXv=G`uCe0WLz@@D*V%JKnWC>mhcx3g58m-l#ijDz zxs_^N<5zRFMu(Dpoczp+)^vfl%BP0%G4bp`eE&`UzE-qzA> z*S4!1I(6hj;@RpN@E}88Y-ix;?l{kM-rymi~^%E1& z&DNDX)Jgr~Rz7*HmVC`R;Qi$S`vHgHU0I>g+a|IzOiX(#MX#SLANFc$DXQ1ocZ%XOhJI-q^0YM z!qhb0ev1#vE!WiQ2QTvYMOCOo44aA{~8={;M2`|HFv)zcrwW^y^}1Y)f0EWbVc>)gTiOrQYzx>%$n>qOQN_8maS&`u3L-mHEC>^{xi1P9TJ1X2J;pOFwCpdcAo`M|Lmg0j_ zU5c|O#mCjb#oiB3@OE~wgCbX3iYL_#PdM&rk19e-TM7kkd*C40Im1w1&R%$ej2qS4 z&fWn}@Wdubfz02<#r7ZNPCjmqww^w&F19}2cmmat>SliuMzh6w_ClGvJ9g53dT7gik|dzVx8-p&+T4#J{c@W`V7yw<|c z)82tY7EdH{$o~GrD=H}LRKPpnf0xO@$R31aRH`=~-3fx(#>?B*(;KsloPq*TfkRA8OHZ5Q{{Y$)1^55} literal 0 HcmV?d00001 diff --git a/vignettes/figure/unnamed-chunk-45-1.pdf b/vignettes/figure/unnamed-chunk-45-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2b7da8dac3833296a9a12495384c26ecbef013ef GIT binary patch literal 4906 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 literal 0 HcmV?d00001 From 2e2c2ad2f16bc1b2f98ad1cfe4514c866edce5a8 Mon Sep 17 00:00:00 2001 From: Jason Klaassen Date: Tue, 23 Jul 2019 17:03:55 -0400 Subject: [PATCH 2/2] Bug Fix for dependency mosaicCore. rlang::fn_env() -> environment() --- .Rhistory | 932 ++++++++++++++++++++++++------------------------- R/binom.test.R | 2 +- 2 files changed, 467 insertions(+), 467 deletions(-) diff --git a/.Rhistory b/.Rhistory index fd2266e0..670f1c82 100644 --- a/.Rhistory +++ b/.Rhistory @@ -1,512 +1,512 @@ -if (getOption("mosaic:parallelMessage", TRUE)) { -message("Using parallel package.\n", -" * Set seed with set.rseed().\n", -" * Disable this message with options(`mosaic:parallelMessage` = FALSE)\n") -} -parallel::mclapply( integer(n), function(...) { cull(lazyeval::f_eval(e2_lazy)) }, mc.cores = 1 ) +#' +#' @examples +#' # These should give identical results, even if the `parallel' package is loaded. +#' set.rseed(123); do(3) * resample(1:10, 2) +#' set.rseed(123); do(3) * resample(1:10, 2) +#' @export +set.rseed <- function(seed) { +if ("package:parallel" %in% search()) { +set.seed(seed, kind = "L'Ecuyer-CMRG") +parallel::mc.reset.stream() } else { -lapply( integer(n), function(...) { cull(lazyeval::f_eval(e2_lazy)) } ) +set.seed(seed) } -if (out.mode=='default') { # is there any reason to be fancier? -out.mode = 'data.frame' } -result <- switch(out.mode, -"list" = resultsList, -"data.frame" = .list2tidy.data.frame( resultsList ), -"matrix" = as.matrix( do.call( rbind, resultsList) ), -"vector" = unlist(resultsList) -) -class(result) <- c(paste('do', class(result)[1], sep="."), class(result)) -if (inherits( result, "data.frame")) { -# we get mutliple parts here if expression involves, for example, :: -# just grab last part. (paste()ing would be out of order -alt_name <- tryCatch( -tail(as.character(rhs(e2_lazy)[[1]]), 1), -error = function(e) "result" -) -names(result) <- mosaicCore::nice_names(names(result)) -names(result)[names(result) == "..result.."] <- -if(mosaicCore::nice_names(alt_name) == alt_name) alt_name else "result" +#' Do Things Repeatedly +#' +#' `do()` provides a natural syntax for repetition tuned to assist +#' with replication and resampling methods. +#' +#' @rdname do +#' @param n number of times to repeat +#' +#' @param object an object +#' +#' @param cull function for culling output of objects being repeated. If NULL, +#' a default culling function is used. The default culling function is +#' currently aware of objects of types +#' `lme`, +#' `lm`, +#' `htest`, +#' `table`, +#' `cointoss`, and +#' `matrix`. +#' +#' @param mode target mode for value returned +#' +#' @param algorithm a number used to select the algorithm used. Currently numbers below 1 +#' use an older algorithm and numbers >=1 use a newer algorithm which is faster in some +#' situations. +#' @param parallel a logical indicating whether parallel computation should be attempted +#' using the \pkg{parallel} package (if it is installed and loaded). +#' +#' @param e1 an object (in cases documented here, the result of running `do`) +#' @param e2 an object (in cases documented here, an expression to be repeated) +#' @param ... additional arguments +#' +#' @note `do` is a thin wrapper around `Do` to avoid collision with +#' [dplyr::do()] from the \pkg{dplyr} package. +#' @return `do` returns an object of class `repeater` which is only useful in +#' the context of the operator `*`. See the examples. +#' @author Daniel Kaplan (\email{kaplan@@macalaster.edu}) +#' and Randall Pruim (\email{rpruim@@calvin.edu}) +#' +#' @section Naming: +#' The names used in the object returned from `do()` are inferred from the +#' objects created in each replication. Roughly, this the strategy employed. +#' +#' * If the objects have names, those names are inherited, if possible. +#' * If the objects do not have names, but `do()` is used with a simple +#' function call, the name of that function is used. +#' Example: `do(3) * mean(~height, data = Galton)` produces a data frame with +#' a variable named `mean`. +#' * In cases where names are not easily inferred and a single result is produced, +#' it is named `result`. +#' +#' To get different names, one can rename the objects as they are created, or +#' rename the result returned from `do()`. Example of the former: +#' `do(3) * c(mean_height = mean(~height, data = resample(Galton)))`. +#' +#' @seealso [replicate()], [set.rseed()] +#' +#' @examples +#' do(3) * rnorm(1) +#' do(3) * "hello" +#' do(3) * 1:4 +#' do(3) * mean(rnorm(25)) +#' do(3) * lm(shuffle(height) ~ sex + mother, Galton) +#' do(3) * anova(lm(shuffle(height) ~ sex + mother, Galton)) +#' do(3) * c(sample.mean = mean(rnorm(25))) +#' # change the names on the fly +#' do(3) * mean(~height, data = resample(Galton)) +#' do(3) * c(mean_height = mean(~height, data = resample(Galton))) +#' set.rseed(1234) +#' do(3) * tally( ~sex|treat, data=resample(HELPrct)) +#' set.rseed(1234) # re-using seed gives same results again +#' do(3) * tally( ~sex|treat, data=resample(HELPrct)) +#' @keywords iteration +#' @export +do <- function(object, ...) { +UseMethod("do") } -attr(result, "lazy") <- e2_lazy -if (out.mode == "data.frame") attr(result, "culler") <- cull -return(result) -}) -do(5000) * c(mean_height = mean(~height, data = resample(Galton))) -}) -utils::globalVariables(c('.')) -#' @importFrom mosaicCore mosaic_formula_q mosaic_formula -# evaluate a lazy object and return the unevaluated expression if the expression -# doesn't evaluate to an existing object. -safe_eval <- function(x) { -tryCatch(eval_tidy(x), -error = function(e) x$expr) -} -.fetchFromDots <- function( dots, name, class='data.frame', n=1, default=NULL ) { -result <- dots[[name]] -if (is.null(result)) { -if (length(result) < n) return(default) -result <- dots[[n]] -if (! inherits(result, 'class') ) result <- default +#' @rdname do +#' @export +do.numeric <- function(object, ...) { +Do(n=object, ...) } +#' @rdname do +#' @export +do.default <- function(object, ...) { +dplyr::do(object, ...) +} +#' @rdname do +#' @export +Do <- function(n=1L, cull=NULL, mode='default', algorithm=1.0, parallel=TRUE) { +new( 'repeater', n=n, cull=cull, mode=mode, algorithm=algorithm, parallel=parallel) +} +#' @rdname mosaic-internal +#' @keywords internal +#' @details +#' `.make.data.frame` converts things to a data frame +#' @param x object to be converted +#' @return a data frame +.make.data.frame <- function( x ) { +if (is.data.frame(x)) return(x) +if (is.vector(x)) { +nn <- names(x) +result <- as.data.frame( matrix(x, nrow=1) ) +if (! is.null(nn) ) names(result) <- nn return(result) } -#' Check if formula +return(as.data.frame(x)) +} +null2na <- function(x) if (is.null(x)) NA else x +#' Repeater objects #' -#' @param x an object -#' @return TRUE for a formula, FALSE otherwise, even if evaluation throws an error +#' Repeater objects can be used with the `*` operator to repeat +#' things multiple time using a different syntax and different output +#' format from that used by, for example, [replicate()]. #' +#' @rdname repeater-class +#' @name repeater-class +#' @seealso [do()] +#' @section Slots: +#' \describe{ +#' \item{`n`:}{Object of class `"numeric"` indicating how many times to repeat something.} +#' \item{`cull`:}{Object of class `"function"` that culls the output from each repetition.} +#' \item{`mode`:}{Object of class `"character"` indicating the output mode +#' ('default', 'data.frame', 'matrix', 'vector', or 'list'). For most purposes 'default' (the default) +#' should suffice.} +#' \item{`algorithm`:}{an algorithm number.} +#' \item{`parallel`:}{a logical indicating whether to attempt parallel execution.} +#' } +#' @exportClass repeater +setClass('repeater', +representation = representation(n='numeric', cull='ANY', mode='character', +algorithm='numeric', parallel='logical'), +prototype = prototype(n=1, cull=NULL, mode="default", algorithm=1, parallel=TRUE) +) +# old version +if(FALSE) { +.merge_data_frames <- function(a, b) { +a <- .make.data.frame(a) +b <- .make.data.frame(b) +if (nrow(b) < 1) return (a) +if (nrow(a) < 1) return (b) +a$mosaic_merge_id <- paste('A',1:nrow(a)) +b$mosaic_merge_id <- paste('B',1:nrow(b)) +result <- merge(a,b,all=TRUE) +w <- which(names(result) == 'mosaic_merge_id') +result <- result[, -w] +return(result) +} +} #' @rdname mosaic-internal #' @keywords internal -.is.formula <- function(x) -tryCatch( inherits(x, 'formula'), error = function(e) {FALSE} ) -#' Check for simple formula +#' @details `.merge_data_frames` is a wrapper around merge #' -#' @param x a formula -#' -#' @return TRUE if formula has no left-hand side or a simple right-hand side -#' (e.g., `NULL`, ., 1, or 0) +#' @param a a data frame +#' @param b a data frame #' +#' @return a data frame +.merge_data_frames = function(a,b) { +a <- .make.data.frame(a) +b <- .make.data.frame(b) +if (nrow(b) < 1) return (a) +if (nrow(a) < 1) return (b) +missing.from.b = setdiff(names(a),names(b)) +missing.from.a = setdiff(names(b),names(a)) +for (var in missing.from.b) b[[var]] = NA +for (var in missing.from.a) a[[var]] = NA +dplyr::bind_rows(a,b) +} #' @rdname mosaic-internal #' @keywords internal -.is.simple.formula <- function(x){ -inherits(x, "formula") && -(length(x) == 2 || is.null(x[[3]]) || -(length(x[[3]]) == 1 && -((is.numeric(x[[3]]) && (x[[3]] == 0 || x[[3]] == 1)) || -(all.names(x[[3]]) %in% c("."))))) -} -# This could use a better name and a better description -#' Extract simple part from formula +#' @details +#' `.squash_names` squashes names of a data frame into a single string #' -#' @param x a formula +#' @param object an object +#' @param sep a character #' -#' @return simple part of formula or NULL if formula is not simple -#' -#' @rdname mosaic-internal -#' @keywords internal -.simple.part <- function(x) { -if (! .is.simple.formula(x) ) { -return(NULL) -} else { -return(x[[2]]) +#' @return a character vector +.squash_names <- function(object,sep=":") { +if ( ncol(object) < 1 ) {return(rep("",nrow(object)))} +result <- object[,1] +if ( ncol(object) < 2 ) {return(as.character(result))} +for (c in 2:ncol(object)) { +result <- paste(result, as.character(object[,c]), sep=sep) } +return(result) } -.flatten <- function(x) { -result <- c() -for (item in x) result <- c(result, item) +#' @rdname do +#' @param x an object created by `do`. +#' @export +print.repeater <- function(x, ...) +{ +message(paste('This repeats a command',x@n,'times. Use with *.')) +return(invisible(x)) +} +.list2tidy.data.frame <- function (l) { +# see if we really just have a vector +ul <- unlist( l ) +if ( length(ul) == length(l) ) { +result <- data.frame(..result.. = as.vector(ul)) +row.names(result) <- NULL +if( !is.null(names(l[[1]])) ) names(result) <- names(l[[1]]) +return(result) +} +# if each element is a data frame, combine them with bind_rows +if ( all( sapply( l, is.data.frame ) ) ) { +return( +parallel::mclapply(l, function(x) {mutate(x, .row= 1:n())}) %>% +dplyr::bind_rows() %>% +mutate(.index = c(1, 1 + cumsum( diff(.row) != 1 ))) +) +} +# If rbind() works, do it +tryCatch( +return ( as.data.frame( do.call( rbind, l) ) ), +error=function(e) {} +) +if (all (sapply(l, length) ) == length(l[[1]]) ) { +result <- as.data.frame( matrix( ul, nrow=length(l) ) ) +names(result) <- names(l[[1]]) return(result) } -#' Aggregate for mosaic +# nothing worked. Just return the list as is. +return( l ) +} +#' Cull objects used with do() #' -#' Compute function on subsets of a variable in a data frame. +#' The [do()] function facilitates easy replication for +#' randomization tests and bootstrapping (among other things). Part of what +#' makes this particularly useful is the ability to cull from the objects +#' produced those elements that are useful for subsequent analysis. +#' `cull_for_do` does this culling. It is generic, and users +#' can add new methods to either change behavior or to handle additional +#' classes of objects. #' -#' @rdname aggregatingAux -#' @return a vector -#' @param formula a formula. Left side provides variable to be summarized. Right side and condition -#' describe subsets. If the left side is empty, right side and condition are -#' shifted over as a convenience. -#' @param data a data frame. -#' Note that the default is `data=parent.frame()`. This makes it convenient to -#' use this function interactively by treating the working environment as if it were -#' a data frame. But this may not be appropriate for programming uses. -#' When programming, it is best to use an explicit `data` argument -#' -- ideally supplying a data frame that contains the variables mentioned -#' in `formula`. -#' @param FUN a function to apply to each subset -#' @param groups grouping variable that will be folded into the formula (if there is room for it). -#' This offers some additional flexibility in how formulas can be specified. -#' @param subset a logical indicating a subset of `data` to be processed. -#' @param drop a logical indicating whether unused levels should be dropped. -#' @param \dots additional arguments passed to `FUN` -#' @param .format format used for aggregation. `"default"` and `"flat"` are equivalent. -# #' @param format format used for aggregation. \code{"default"} and \code{"flat"} are equivalent. -# #' Ignored if \code{.format} is not \code{NULL}. -#' @param .overall currently unused -#' @param .name a name used for the resulting object -# #' @param name a name used for the resulting object. Ignored if \code{.format} is not \code{NULL}. -#' @param .envir an environment in which to evaluate expressions -# #' @param envir an environment in which to evaluate expressions. -# #' Ignored if \code{.envir} is not \code{NULL}. -#' @param .multiple a logical indicating whether FUN returns multiple values -# #' @param multiple a logical indicating whether FUN returns multiple values -#' Ignored if `.multiple` is not `NULL`. +#' @param object an object to be culled +#' @param ... additional arguments (currently ignored) #' -#' @examples -#' if (require(mosaicData)) { -#' maggregate( cesd ~ sex, HELPrct, FUN=mean ) -#' # using groups instead -#' maggregate( ~ cesd, groups = sex, HELPrct, FUN=sd ) -#' # the next four all do the same thing -#' maggregate( cesd ~ sex + homeless, HELPrct, FUN=mean ) -#' maggregate( cesd ~ sex | homeless, HELPrct, FUN=sd ) -#' maggregate( ~ cesd | sex , groups= homeless, HELPrct, FUN=sd ) -#' maggregate( cesd ~ sex, groups = homeless, HELPrct, FUN=sd ) -#' # this is unusual, but also works. -#' maggregate( cesd ~ NULL , groups = sex, HELPrct, FUN=sd ) -#' } +#' @details When `do(n) * expression` is evaluated, `expression` +#' is evaluated `n` times to produce a list of `n` result objects. +#' `cull_for_do` is then applied to each element of this list to +#' extract from it the information that should be stored. For example, +#' when applied to a object of class `"lm"`, +#' the default `cull_for_do` extracts the coefficients, coefficient +#' of determinism, an the estimate for the variance, etc. #' #' @export -maggregate <- -function( -formula, -data=parent.frame(), -FUN, -groups=NULL, -subset, -drop=FALSE, -..., -.format = c('default', 'table', 'flat'), -.overall = mosaic.par.get("aggregate.overall"), -# .multiple = NULL, -.multiple=FALSE, -# .name = NULL, -.name = deparse(substitute(FUN)), -# .envir = NULL, -.envir = parent.frame () -) { -# if (inherits(formula, c("environment", "data.frame")) && -# inherits(data, "formula")) { -# temp <- formula -# formula <- data -# data <- temp -# } -# -if (! inherits(data, c("environment", "data.frame")) ) { -if (inherits(data, c("tbl"))) -stop ("Your tbl is not a data.frame. Perhaps you need dplyr functions here.", -call. = FALSE) -else -stop("data must be an environment or data.frame.", call. = FALSE) -} -formula <- mosaicCore::mosaic_formula_q(formula, groups = groups, envir = .envir) -if (length(formula) == 2) { -return(FUN( eval(formula[[2]], data, .envir), ...)) -} -dots <- list(...) -groupName <- ".group" # gets changed to something better later when possible. -.format <- match.arg(.format, c('default', 'table', 'flat')) -evalF <- mosaicCore::evalFormula(formula, data=data) -if (!missing(subset)) { -subset <- eval(substitute(subset), data, environment(formula)) -if (!is.null(evalF$left)) evalF$left <- evalF$left[subset,] -if (!is.null(evalF$right)) evalF$right <- evalF$right[subset,] -if (!is.null(evalF$condition)) evalF$condition <- evalF$condition[subset,] -} -# this should now be standardized by the call to mosaic_formula_q() above. -# if ( is.null( evalF$left ) ) { -# evalF$left <- evalF$right -# evalF$right <- evalF$condition -# evalF$condition <- NULL -# } -if ( is.null(evalF$left) || ncol(evalF$left) < 1 ) { -if (ncol(evalF$right) > 1) warning("Too many variables in rhs; ignoring all but first.") -if (.format=="table") { -if (.multiple) stop ("table view unavailable for this function.") -ldata <- evalF$right[,1,drop=FALSE] -gdata <- group_by(data) -res <- as.data.frame( -dplyr::do(gdata, foo = FUN( as.data.frame(.)[, 1], ...) ) ) -names(res)[ncol(res)] <- gsub(".*::", "", .name) -return(res) -return(evalF$right[,1,drop=FALSE] %>% -group_by() %>% -dplyr::do( do.call(FUN, list(evalF$right[,1], ...)) ) %>% -as.data.frame() -) -# return(plyr::ddply(evalF$right[,1,drop=FALSE], names(NULL), -# function(x) do.call(FUN, list(evalF$right[,1], ...)) -# )[,-1]) # remove the .id column since it is uninteresting here. +#' @examples +#' cull_for_do(lm(length ~ width, data = KidsFeet)) +#' do(1) * lm(length ~ width, data = KidsFeet) +cull_for_do <- function(object, ...) { +UseMethod("cull_for_do") } -return( do.call(FUN, alist(evalF$right[,1], ...) ) ) -} else { -if (ncol(evalF$left) > 1) warning("Too many variables in lhs; ignoring all but first.") -if (.format=='table') { -if (.multiple) stop ("table view unavailable for this function.") -ldata <- mosaicCore::joinFrames(evalF$left[,1,drop=FALSE], evalF$right, evalF$condition) -ldata$.var <- ldata[, 1] -gdata <- do.call( group_by, c(list(ldata), -lapply(union(names(evalF$right), names(evalF$condition)), -as.name )) ) -res <- as.data.frame( -dplyr::do(gdata, foo = FUN( as.data.frame(.)[, 1], ...) ) ) -names(res)[ncol(res)] <- gsub(".*::", "", .name) -# res <- plyr::ddply( -# mosaicCore::joinFrames(evalF$left[,1,drop=FALSE], evalF$right, evalF$condition), -# union(names(evalF$right), names(evalF$condition)), -# function(x) do.call(FUN, list(x[,1], ...)) -# ) -} else { -res <- lapply( split( evalF$left[, 1], -mosaicCore::joinFrames(evalF$right, evalF$condition), -drop=drop), -function(x) { do.call(FUN, alist(x, ...) ) } -) -groupName <- paste(c(names(evalF$right), names(evalF$condition)), collapse=".") -if (! .multiple ) res <- unlist(res) -if (! is.null(evalF$condition) ) { -if (ncol(evalF$left) > 1) message("Too many variables in lhs; ignoring all but first.") -res2 <- lapply( split( evalF$left[, 1], evalF$condition, drop=drop), -function(x) { do.call(FUN, alist(x, ...) ) } -) -groupName <- paste(names(evalF$condition), collapse=".") -if (!.multiple) { -res <- c( res, unlist(res2) ) -} else { -res <- c(res, res2) +#' @export +cull_for_do.default <- function(object, ...) { +object } +#' @export +cull_for_do.fitdistr <- function(object, ...) { +est <- object$estimate +names(est) <- paste0(names(est), ".est") +se <- object$sd +names(se) <- paste0(names(se), ".se") +c(est, se) } -if (.multiple) { -result <- res -res <- result[[1]] -for (item in result[-1]) { -res <- as.data.frame(rbind(res,item)) +#' @export +cull_for_do.aov <- function(object, ...) { +cull_for_do(anova(object)) } -if ( nrow(res) == length(names(result)) ) { -res[groupName] <- names(result) -} else { -res[groupName] <- rep(names(result), each=nrow(res) / length(names(result)) ) +#' @export +cull_for_do.anova <- function(object, ...) { +res <- as.data.frame(object) +res <- cbind (data.frame(source=row.names(res)), res) +names(res)[names(res) == "Df"] <- "df" +names(res)[names(res) == "Sum Sq"] <- "SS" +names(res)[names(res) == "Mean Sq"] <- "MS" +names(res)[names(res) == "F value"] <- "F" +names(res)[names(res) == "Pr(>F)"] <- "pval" +names(res)[names(res) == "Sum of Sq"] <- "diff.SS" +names(res)[names(res) == "Res.Df"] <- "res.df" +return(res) +return( data.frame( +SSTotal= sum(object$`Sum Sq`), +SSModel= object$`Sum Sq`[1], +SSError= object$`Sum Sq`[2], +MSTotal= sum(object$`Sum Sq`), +MSModel= object$`Mean Sq`[1], +MSError= object$`Mean Sq`[2], +F=object$`F value`[1], +dfModel=object$Df[1], +dfError=object$Df[2], +dfTotal=sum(object$Df) +) ) } -res <- res[, c(ncol(res), 1:(ncol(res) -1))] +#' @export +cull_for_do.table <- function(object, ...) { +result <- data.frame(object) +res <- result[[ncol(result)]] +nms <- as.character(result[[1]]) +if (ncol(result) > 2) { +for (k in 2:(ncol(result)-1)) { +nms <- paste(nms, result[[k]],sep=".") } } +names(res) <- nms +return(res) } -w <- grep("V[[:digit:]]+", names(res)) -if (length(w) == 1) { -names(res)[w] <- gsub(".*:{2,3}", "", .name) -} else { -names(res)[w] <- paste0( gsub(".*:{2,3}", "", .name), 1:length(w) ) -} -row.names(res) <- NULL -return( res ) -} -# for handling functions of two inputs -# under construction still -maggregate2 <- function(formula, data=parent.frame(), FUN, subset, -overall=mosaic.par.get("aggregate.overall"), -.format=c('default', 'table', 'flat'), drop=FALSE, -.multiple=FALSE, -groups=NULL, -.name = deparse(substitute(FUN)), -...) { -dots <- list(...) -formula <- mosaicCore::mosaic_formula_q(formula, groups=groups, as.environment(data)) -.format <- match.arg(.format) -evalF <- mosaicCore::evalFormula(formula, data=data) -if (!missing(subset)) { -subset <- eval(substitute(subset), data, environment(formula)) -if (!is.null(evalF$left)) evalF$left <- evalF$left[subset,] -if (!is.null(evalF$right)) evalF$right <- evalF$right[subset,] -if (!is.null(evalF$condition)) evalF$condition <- evalF$condition[subset,] -} -# this should now be standardized by the call to mosaic_formula_q() above. -# if ( is.null( evalF$left ) ) { -# evalF$left <- evalF$right -# evalF$right <- evalF$condition -# evalF$condition <- NULL -# } -if ( is.null(evalF$left) || ncol(evalF$left) < 1 ) -stop("formula must have lhs.") -if (ncol(evalF$left) > 1) stop("Too many variables in lhs.") -if (.format=='table') { -if (.multiple) stop ("table view unavailable.") -ldata <- mosaicCore::joinFrames(evalF$left[,1,drop=FALSE], evalF$right, evalF$condition) -ldata$.var <- ldata[, 1] -gdata <- do.call( group_by, c(list(ldata), as.name(names(evalF$condition)) ) ) -res <- as.data.frame( dplyr::do(gdata, foo = FUN( as.data.frame(.)[,1], as.data.frame(.)[,2], ...) ) ) -names(res)[ncol(res)] <- gsub(".*::", "", .name) +#' @export +cull_for_do.aggregated.stat <- function(object, ...) { +result <- object +res <- as.vector(result[, "S"]) # ncol(result)] +names(res) <- +paste( attr(object, 'stat.name'), +.squash_names(object[,1:(ncol(object)-3),drop=FALSE]), sep=".") +return(res) +} +#' @export +cull_for_do.lme <- function(object, ...) { +result <- object +names(result) <- mosaicCore::nice_names(names(result)) +return( object$coef$fixed ) +} +#' @export +cull_for_do.lm <- function(object, ...) { +sobject <- summary(object) +Fstat <- sobject$fstatistic[1] +DFE <- sobject$fstatistic["dendf"] +DFM <- sobject$fstatistic["numdf"] +if (!is.null(Fstat)) { +names(Fstat) <- "F" +result <- c(coef(object), sigma=sobject$sigma, +r.squared = sobject$r.squared, +Fstat, +DFM, +DFE) } else { -res <- lapply( split( evalF$left[,1], -mosaicCore::joinFrames(evalF$right, evalF$condition), -drop=drop), -function(x) { do.call(FUN, alist(x, ...) ) } +result <- c(coef(object), sigma=sobject$sigma, +r.squared = sobject$r.squared ) -groupName <- paste(c(names(evalF$right), names(evalF$condition)), collapse=".") -if (! .multiple ) res <- unlist(res) -if (! is.null(evalF$condition) ) { -if (ncol(evalF$left) > 1) message("Too many variables in lhs; ignoring all but first.") -res2 <- lapply( split( evalF$left[,1], evalF$condition, drop=drop), -function(x) { do.call(FUN, alist(x, ...) ) } +} +mosaicCore::vector2df(result, nice_names = TRUE) +} +# @export +# cull_for_do.groupwiseModel <- function(object, ...) { +# sobject <- summary(object) +# Fstat <- sobject$fstatistic[1] +# DFE <- sobject$fstatistic["dendf"] +# DFM <- sobject$fstatistic["numdf"] +# if (!is.null(Fstat)) { +# names(Fstat) <- "F" +# result <- c(coef(object), sigma=sobject$sigma, +# r.squared = sobject$r.squared, +# Fstat, +# DFM, +# DFE) +# } else { +# result <- c(coef(object), sigma=sobject$sigma, +# r.squared = sobject$r.squared +# ) +# } +# names(result) <- nice_names(names(result)) +# return(result) +# } +# +#' @export +cull_for_do.htest <- function(object, ...) { +if (is.null(object$conf.int)) { +result <- data.frame( +statistic = null2na(object$statistic), +parameter = null2na(object$parameter), +p.value = null2na(object$p.value), +method = null2na(object$method), +alternative = null2na(object$alternative), +data = null2na(object$data.name) ) -groupName <- paste(names(evalF$condition), collapse=".") -if (!.multiple) { -res <- c( res , unlist(res2) ) } else { -res <- c(res, res2) +result <- data.frame( +statistic = null2na(object$statistic), +parameter = null2na(object$parameter), +p.value = null2na(object$p.value), +conf.level = attr(object$conf.int,"conf.level"), +lower = object$conf.int[1], +upper = object$conf.int[2], +method = null2na(object$method), +alternative = null2na(object$alternative), +data = null2na(object$data.name) +) } +if ( !is.null(names(object$statistic)) ) +names(result)[1] <- names(object$statistic) +if ( !is.null(names(object$parameter)) ) +names(result)[2] <- names(object$parameter) +return(result) } -if (.multiple) { -result <- res -res <- result[[1]] -for (item in result[-1]) { -res <- as.data.frame(rbind(res,item)) +# if (inherits(object, 'table') ) { +# nm <- names(object) +# result <- as.vector(object) +# names(result) <- nm +# return(result) +# } +#' @export +cull_for_do.cointoss <- function(object, ...) { +return( c(n=attr(object,'n'), +heads=sum(attr(object,'sequence')=='H'), +tails=sum(attr(object,'sequence')=='T'), +prop=sum(attr(object,'sequence')=="H") / attr(object,'n') +) ) } -if ( nrow(res) == length(names(result)) ) { -res[groupName] <- names(result) +#' @export +cull_for_do.matrix <- function(object, ...) { +if (ncol(object) == 1) { +nn <- rownames(object) +object <- as.vector(object) +if (is.null(nn)) { +names(object) <- paste('v',1:length(object),sep="") } else { -res[groupName] <- rep(names(result), each=nrow(res) / length(names(result)) ) +names(object) <- nn +} +return(object) } -res <- res[, c(ncol(res), 1:(ncol(res) -1))] +if (nrow(object) > 1) { +res <- as.data.frame(object) +res[[".row"]] <- row.names(object) +return(res) } +# if we get here, we have a 1-row or empty matrix +row.names(object) <- NULL +object +} +#' @rdname do +#' @aliases *,repeater,ANY-method +#' @export +setMethod( +"*", +signature(e1 = "repeater", e2="ANY"), +function (e1, e2) +{ +e2_lazy <- rlang::enquo(e2) +# e2unevaluated = substitute(e2) +# if ( ! is.function(e2) ) { +# frame <- parent.frame() +# e2 = function(){eval(e2unevaluated, envir=frame) } +# } +n = e1@n +cull = e1@cull +if (is.null(cull)) { +cull <- cull_for_do +} +out.mode <- if (!is.null(e1@mode)) e1@mode else 'default' +resultsList <- if( e1@parallel && "package:parallel" %in% search() ) { +if (getOption("mosaic:parallelMessage", TRUE)) { +message("Using parallel package.\n", +" * Set seed with set.rseed().\n", +" * Disable this message with options(`mosaic:parallelMessage` = FALSE)\n") } -w <- grep("V[[:digit:]]+", names(res)) -if (length(w) == 1) { -names(res)[w] <- gsub(".*:{2,3}", "", .name) +parallel::mclapply( integer(n), function(...) { cull(rlang::eval_tidy(e2_lazy)) }, mc.cores = 4 ) } else { -names(res)[w] <- paste0( gsub(".*:{2,3}", "", .name), 1:length(w) ) -} -row.names(res) <- NULL -return( res ) -} -safe_eval(9) -?rlang::lifecycle -covr::report() -library("rlang", lib.loc="~/R/win-library/3.5") -install.packages("rlang") -install_github("https://github.com/r-lib/rlang.git") -install_github.packages("https://github.com/r-lib/rlang.git") -install_github.packages(r-lib/rlang) -install_github(r-lib/rlang) -library(devtools) -library("devtools") -library("devtools", lib.loc="~/R/win-library/3.5") -remove.packages(c("git2r", "devtools", "rversions")) -install.packages("devtools") -install_github("r-lib/rlang") -devtools::install_github("r-lib/rlang") -install.packages("rlang") -library("rlang", lib.loc="~/R/win-library/3.5") -?parent.frame -install.packages("rlang") -install.packages("rlang") -library(mosaic) -mplot(KidsFeet) -install.packages("manipulate") -mplot(KidsFeet) -methods("mplot") -mplot(lm(length ~ width, data = KidsFeet)) -freqpolygon( ~ Sepal.Length, data = iris) -historam( ~ Sepal.Length, data = iris) -histogram( ~ Sepal.Length, data = iris) -freqpolygon(~Sepal.Length | Species, data = iris) -example(freqpolygon) -library(mosaic) -mplot(KidsFeet) -2 -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -detach(mosaic) -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mplot.R') -mplot(KidsFeet) -install.packages("manipulate") -mplot(kidsFeet) -install.packages("manipulate") -install.packages("manipulate") -library(mosaicData) -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mplot.R') -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library("manipulate", lib.loc="~/R/win-library/3.5") -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/utils.R') -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mplot.R') -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -source('~/GitHub/ExampleRPackage/mosaic/R/mPlots.R') -mplot(KidsFeet) -library("manipulate", lib.loc="~/R/win-library/3.5") -mplot(KidsFeet) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library("mosaic", lib.loc="~/R/win-library/3.5") -mplot(KidsFeet) -mosaic::mplot(KidsFeet) -library(ggformula) -mplot(KidsFeet) -library("ggformula", lib.loc="~/R/win-library/3.5") -library("ggplot2", lib.loc="~/R/win-library/3.5") -mplot(KidsFeet) -debug(mplot(KidsFeet)) -debugonce(mplot(KidsFeet)) -debugonce(mplot) -KidsFeet -debug() -debug({ mplot(KidsFeet) }) -devtools::load_all(".") -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library("manipulate", lib.loc="~/R/win-library/3.5") -mplot(KidsFeet) -library("ggplot2", lib.loc="~/R/win-library/3.5") -library("ggformula", lib.loc="~/R/win-library/3.5") -mplot(KidsFeet) -mplot(KidsFeet) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -mplot(KidsFeet) -library(mosaic) -library(mosaic) -library(mosaic) -library(mosaic) -library(mosaic) -library(mosaic) -library(mosaic) -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) -confint(bootstrap) -library(mosaic) -library(mosaic) -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) -confint(bootstrap) -library(mosaic) -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) -confint(bootstrap) -library(mosaic) -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) -confint(bootstrap) -confint(bootstrap, method ="stderr") -library(mosaic) -confint(bootstrap, method ="stderr") %>% dput() -library(mosaic) -confint(bootstrap, method ="stderr") %>% dput() -library(mosaic) -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) %>% dput() -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) -bootstrap <- do(500) * diffmean( age ~ sex, data = resample(HELPrct) ) %>% dput() -bootstrap <- do(50) * diffmean( age ~ sex, data = resample(HELPrct) ) %>% dput() +lapply( integer(n), function(...) { cull(rlang::eval_tidy(e2_lazy)) } ) +} +if (out.mode=='default') { # is there any reason to be fancier? +out.mode = 'data.frame' +} +result <- switch(out.mode, +"list" = resultsList, +"data.frame" = .list2tidy.data.frame( resultsList ), +"matrix" = as.matrix( do.call( rbind, resultsList) ), +"vector" = unlist(resultsList) +) +class(result) <- c(paste('do', class(result)[1], sep="."), class(result)) +if (inherits( result, "data.frame")) { +# we get mutliple parts here if expression involves, for example, :: +# just grab last part. (paste()ing would be out of order +alt_name <- tryCatch( +tail(as.character(rhs(e2_lazy)[[1]]), 1), +error = function(e) "result" +) +names(result) <- mosaicCore::nice_names(names(result)) +names(result)[names(result) == "..result.."] <- +if(mosaicCore::nice_names(alt_name) == alt_name) alt_name else "result" +} +attr(result, "lazy") <- e2_lazy +if (out.mode == "data.frame") attr(result, "culler") <- cull +return(result) +}) +do(3000) * rnorm(1) +do(3000) * "hello" +do(3000) * 1:4 +do(3000) * mean(rnorm(25)) +do(3000) * lm(shuffle(height) ~ sex + mother, Galton) +do(3000) * anova(lm(shuffle(height) ~ sex + mother, Galton)) +do(3000) * c(sample.mean = mean(rnorm(25))) +# change the names on the fly +do(3000) * mean(~height, data = resample(Galton)) +do(3000) * c(mean_height = mean(~height, data = resample(Galton))) +set.rseed(1234) +do(3000) * tally( ~sex|treat, data=resample(HELPrct)) +set.rseed(1234) # re-using seed gives same results again +do(3000) * tally( ~sex|treat, data=resample(HELPrct)) +}) diff --git a/R/binom.test.R b/R/binom.test.R index ef8b13fc..7feeb9ff 100644 --- a/R/binom.test.R +++ b/R/binom.test.R @@ -175,7 +175,7 @@ setMethod( { if (is.null(data)) { if (! is.null(n)) stop("Improper `n'; did you forget `data = ' perhaps?", call. = FALSE) - data <- rlang::fn_env(x) + data <- environment(x) } formula <- mosaic_formula_q(x, groups = NULL, max.slots = 1)