g.data/0000755000176000001440000000000012100701770011433 5ustar ripleyusersg.data/MD50000644000176000001440000000112512100701770011742 0ustar ripleyusersb945738d227f34e67a1574809f302ec0 *ChangeLog 5159a38aece27d998de55ba891b9c900 *DESCRIPTION 0816d48257794f25a67b80e7eb5c17d5 *NAMESPACE d1efc0661a32b140b5a7e9fe51385e55 *R/g.data.attach.R d5226ab665136647a70d33bfc415c227 *R/g.data.get.R d322b4c5ad903d98d3347e7da024a5b4 *R/g.data.mash.R d91db07e36234681aace6c413e05811c *R/g.data.put.R 4941d37edbb786615a5c9d97511736c6 *R/g.data.save.R e38c896c3440c8ed15e652781cf6a8d2 *R/g.data.unmash.R b3873acfd0b389bacde3d7ff19551346 *inst/doc/g.data.Rnw 76df34a180f4508ebb2fa146862085a5 *inst/doc/g.data.pdf 593ec8da4f7e13fbbb1cbca61c33b967 *man/g.data.save.Rd g.data/inst/0000755000176000001440000000000012044277025012420 5ustar ripleyusersg.data/inst/doc/0000755000176000001440000000000012100606501013151 5ustar ripleyusersg.data/inst/doc/g.data.pdf0000644000176000001440000022247112100606501015012 0ustar ripleyusers%PDF-1.4 3 0 obj << /Length 1795 /Filter /FlateDecode >> stream xڵێF86TU**jJLu'l@>89soGO_5y.&UYagb.$gO Ϯ&ϓ?`P XTlus=%"K:SO_|lf(H2T9IM٪H_W ,$Pj@Hn<4T/JKޢ;rIe 'հY@SMh j'52#~#ݴ&*zJQ`l+z܁Ɠװyr-^ZܠV%_cz.h o2b,͚dc=PM'GM6f+X8 sq\ Ġл bʱlVMr$ nH#:\aͩ\b(}( @zqk݊(v8XdBȜeDNWT)L9Tɦ.XDcC̗r|.JrmC1VT1m"[^Uތ˙)nO^:EڕXWhvO!G\h~wV#FfGؿ\+B2  泔%08_D(V[LZ*8[U 1Kkf6 ֵz0GtJTTd=]eVbry/ VRxu@jbQ Ѯ!:  >/^[F /E"A *!!-PtAowB5#7se`W Fu۷"cv)ƸohR=M}7v)f-W1 (K9a0Vjx2bjRCW,J֯!wIYDyG(* P5_cEd)a Н0-spfvqK}2 ⭣ >#ً*]C!yk+NXZ(A)eb(AWCC¤]ml!`:aU_~9աC1PnA\i9*q#h#t)aP)l2 wʼnEVK\tѡu`#tqߙq`s.-B<6O{.hcYom0xI|mCQkuh™<1?ct(ޗh4 bBr֊ςB_QCpyj XsGF[<8 Basdk8F@qx8=q~CV7QS[y𛳊ޗِ'"_|㙨N[hӑKB-k~ g"õ;A$ʂ{}?ͫOܐR 0D.*P}6|4.O\#-`_4=^"S fx0oO\#%nuƟ*0\"&$)1!'Q⪪G^^<iendstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 1 0 obj << /Font << /F31 6 0 R /F20 9 0 R /F38 12 0 R /F43 15 0 R /F48 18 0 R /F49 21 0 R /F58 24 0 R /F60 27 0 R >> /ProcSet [ /PDF /Text ] >> endobj 31 0 obj << /Length 1510 /Filter /FlateDecode >> stream xXKo7Wb^nP.C B{Hs+VK -r p ՛'B9&1̖FHT̷os6 s=|k}q4B;U}\wC a) )j8{7ᓩLkSȶ$(ӂX299 3h̅RW}zǪ@ 膕::v!_o~M$Ok["a'NXwhi=:s^tâ&ЦV<.9cMGQ#`o?~cmQ,yPmp0P;T) /HV}1 д\'sN ?ɫI9ͤ[&$0rmPzY$!Mq> T5 s4|s9#Hu20cwAsn$CE^_瘥֖ȊS'_~sv΁Ui: {Zȣ9ꇮ爺(&xmn] nՖ3-7鿎9^ey#s2bN}5-o-#AӇhBn&p#@2a" ^ ."LLc3%Q1D$u"OYGwWb3T}[6q> wwpԨX]UUVըCU왔 &M=Ⱦ[BLc #4 a.A2yO9wQTҗj>hm-bH!t/:d3:ǮOhY"|.5>U0!RFc9δt(jf³PZ&m19˟u/},RY{8b\0nlc>L2"5LiYHdL>E.; uv}'hA?)XQ5\Xgw;}vRA_Z 7vCbl#o- +ӀMwA}n 6̅C̲A1fv Y̨=HRNq札)zW?^ .rendstream endobj 30 0 obj << /Type /Page /Contents 31 0 R /Resources 29 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 29 0 obj << /Font << /F60 27 0 R /F20 9 0 R /F58 24 0 R /F49 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 34 0 obj << /Length 2130 /Filter /FlateDecode >> stream xMs۶_qf"총}>w7MD;%5.vA.(Rl/^|)δVs2gUTQbS=qcLgTSyKn`:0tsk0Vx%MM0igaoG< M#v븆c0/#]>g,*fTe\Wә3p$Wa0`K% [#̖oo_¸3_`|Gt?!P$17zi:=nQѹ^J9W'H :6H븜T)J撿-%Lz9a4 ®ɛi0io=k*e]m@:g 漗Q$a(Wx D$ J@4;iD "IZ#V3Dt:)Z31ju|b))Y[Pa : Vj.t$0c8i BiyᐎWZYmOr^a:D >j2V{@Q=se!/)5<6gjŢiH Iw;j;ʗ¨睬F5֨˔ DʾG fSX{KNˆ=ʷB 24,8xES3(TV)*N<_"7eqksqEڪ:t45jTYUG9%2>g/x*Is'KXQuJn&onCF};Ш1j ha'A ޲&k*{{塧O&j}F\;\m7/)Ilݕ+,C-yn:b*Y]En ;,ǮPRiHjwn&ԃ>hEBˮ\Q_xxD(r/(~͙ƷGmL4ݿNV@+YYUPw`ř* 3aSPyUe2ZxrRBiX[ %3TTE㭃푆19F$;/;Nɶڦ. UJ\&\Ě#|%/ sа _sN؊ݨ@l73{B.LGd:3gjh1՟UZVlc>d1^A _AWD+ه#nIen4L5>6`R oE` 5$iv0µ_q+j,~2)aKSRGHzf k,in URy,*TCwzbpԳcRҔ"D3Puݕ֘ ډo)ն=7!do#cid>NWKcJ'FbnJ-uPƖJ53CxM!2b\Tm8 Յ$3`ZToh"DΈs#˕؈[{K|o需ҥ̷^`${ev_i.ް3)F4Yp{7&"~ ϟ{ @+PDUq9ʦդwxS~ -'^sGQp|E<6[´Gg\+gC}$.c* ATalO/x7Oendstream endobj 33 0 obj << /Type /Page /Contents 34 0 R /Resources 32 0 R /MediaBox [0 0 612 792] /Parent 28 0 R >> endobj 32 0 obj << /Font << /F20 9 0 R /F60 27 0 R /F58 24 0 R /F49 21 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj << /Length 443 /Filter /FlateDecode >> stream xڕSMO1WhxACVa%!dM%K{flg޼7;>FG2RaATFX4h Zo\Kјw:鯸~MfuN"; kڷ&c^jP%j[i/ u> endobj 35 0 obj << /Font << /F49 21 0 R /F62 38 0 R /F20 9 0 R >> /ProcSet [ /PDF /Text ] >> endobj 39 0 obj << /Length 161 /Filter /FlateDecode >> stream x337U0P0U0S01CB.c I$r9yr\`W4K)YKE!P E? 00(?;h0a$>z A?$h LF N8\ù\=Yendstream endobj 38 0 obj << /Type /Font /Subtype /Type3 /Name /F62 /FontMatrix [0.01004 0 0 0.01004 0 0] /FontBBox [ 5 6 44 44 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 136 /LastChar 136 /Widths 40 0 R /Encoding 41 0 R /CharProcs 42 0 R >> endobj 40 0 obj [48.75 ] endobj 41 0 obj << /Type /Encoding /Differences [136/a136] >> endobj 42 0 obj << /a136 39 0 R >> endobj 26 0 obj << /Length1 1667 /Length2 9464 /Length3 532 /Length 10435 /Filter /FlateDecode >> stream xeXm)%QPrhIj`AnP~~y?i{:_ZJ%UfS1Xj dUԀl - r@mA`>q2ǹr`Ġvn0#A n 1A`x5@j;D*p0g) 08[ ֿ _1P;'G0 5l;TO{`SJ;!&"`3/[I+T hbp9!mM{p"%cX uTs~&¿_$lM[`0|@lM+2+-> k]98ak_?V{'# `u1km߲X@05 m`9`[W3؀~+Rnv?pAMK<Vw0 [Bm3'ܚqN)G 3oYC;g;8iN߭₧5g?o&qoPMHſ^G7&xW~oW 1 dbv5[Ugߋ 7hM& Y_j/hŸ?o?~oo $pW?` ܕw]9pW ܕo_쬮 ܕ?.PWffv傗8'9_Qf3N]& PwɍeO 8[B6tXr"WE&xL17KV7KEW)}%1X)*0&x':d^KÉAd.×,oT[o4f|Mmi=~yJ N _nQ_^N)rRqc%KB'+kK>>>%W+3&T3T]Mh 91"^JĈhHiNz~GX^ҍ à jacxؐgyҌ:#{ "1exF-7W$17k9ZV%\PY)){D~xK ޤ\6ةlS#DY:>%5E.x7Pcyyזq%U? !Bcb ;(R2F Ḿ'bNscQET򴹓Hƺ-;jqc׻ gğ/l$ެ{#WUBFP%omhT Llb:=[Olb~4yPqhRD[H] rj() Эd݆iݞ6Xbzq"o^[KC??BttD W#4v{oqqwQ*S^kGg7}%JT0lĿQXd8uj*)SU3 *遒HG-E+kc,ilBeβ I[xSl _jͤB԰6FJWAǤD;r32t=n-w (@s^0U/a d;܃󊾲Co p[$7G\g?DxFrE@=wb\oϮDsi} Xb@0{GZ-,?YL: Vܪ6#QNbStS+4譒1IBq\G'7J4uniÄx=M,[bxp,+T$ALWu b T 秕B/Y y߶GmdOoըGu6$^#6Б52_$Pu#Vue0NYhR!K~lPi?E5LKʧ!Rs7'ۧd+<Ǘ8 )9+mh+5(Kw`?<0^jRam 7/O_fO ?mt|9íƛ_\e6nYֽ֩zZ$E|nizgFΘ^h^O.VǗt9›n o3`>]!BD3zL؆2 Ԩ<~!-anvt^n a}Zw9ŢАK5|,@`t ~Rb-,R5['Έ^2?F0ց)ƨXtN%llkqE?GϴKwMA4Zg{EuAUyLU(Ϥf ώU(#÷_Hޝ)Gc /KVEzfi菱^mDJPT{3Ds Xu 0ڄǛ˃=|.'Y:TzWy/gFv+H!{$/GbnabRCcR. v o& M4_m}2>&~E9C$=aa<)(iP[2LPK tK.Dg.MνFz?yM.cov5]g`s8芪:r࿕n-iG+|xؕ5_8"tD2~ ;M gᨚ ss{΁7xuwpRuǩ)&`䁼kAtPצDt?B~WYb.A`N AMsjV蝔v?dۺȹY5Mb^ţ>%Lr?uiU3cjӎy<1&lrA4C-@]"q&CƠy `gF͋vk-,]N;:5lM]l8Z48D|5ʨ=Sr pͿ-CB.bH=/W/ĦP78V}G=嵐s^/;s"ܮ|A)]D!im- | >#I79T8cpO"{"mYbIVe*FGyͯm\#bk'+eؗFQV~<)4a!ẗ|_J)2k&9M F)(n4$,#fHEI@v,S&)fƚ f3rt(^iʍ2V}o^{t|ܤ|K wy|i=/N9]7oc ohǬX.eeȽQX!2왙Lg,En_A~2XǒWX+!yў4ftj (FDZl]t4%d<-y6w|YQ7ژ/M5!JyVMnAӧa&F mwwYWڃybIΗ<20 RbQ-jGXK@[ Gg;AO&2iܶ{h*ݟ1s1ʯ[ۛ${ ۲<8ۃƷ$/+SzCJxtj%zgNRӧ /UwL;q7^~Q%G)߈\wL=YU|%UDR˼@XR!JkxP'aLsXO RIʒ}wCkGTv^&~ǯ`Jc6"#[Օ(c:i+2Ppn YfU] ۶,ߓsUY(ѵk.lRڏD4`C~-RMՌ3믑Ѵvy,g RΉ`v8qPrHPXvy|1(n3&rm:KHIra{!6o欃CA΅AEy $t].:L}ܽHuIY]@b=喴C2演isNʳ/)Yu}<FXڑb}.hP+S1e'摗cjkz2jmѡ?oy^޽ГkiK]y%F2 kt"$0Z `xb\×l5caoub=ER֩^7\}L팪L}]ySVNZ}s<%2Õ3*d(#Wː,"@2_upA 7/֘s39t"s̤6>Of3,:IJ+ːBT ޚ|.eX=I"'ʚ!oԹSk~X0j \~G|9sow%ᡝ)5vП*rǖZW_[XtKʾos§a4' !W&$ߩmO*+ĺ>7`h7$\x]q_Zk;? 쑫OPAyC2&_I1gLcX{. -V1v] LuCzW%Onr4=/~{>nKĠn:1>e=7M]*Je`ˏѧl&M M2MȦr-aN\!C>2yh܍Fü9<tTZsS~1]y3xPFJB$;}sWw1qSilT=0yX~R T9mtcZ:&c+qnerݺ[=; )|J˺5Qm#j Gf=נW4E׌g{ $zt&_Nl{SOQIUM$^b'NRg:U!T xFOxR0Vn|/i;>R=|(dDe ]{v0^"yrla; wgAZ'MIh 1|`?n~-2K@eEFvww]yIBaþ鍃󯍬:AGѪ}wvK&i5~ײ2J( ' jG ;ZiLSjǃu H[I(hC3`x~% v[L_|8{D4РQ<_5gϞ^ݟcCù\h3\:}:lF٠ڿ7osKYEIPJFb[lE} sy{n S\)YAХOv>=L,ENKH-q!aٽ lΘ蕡<>6`z 9v[6<:llh>ՆлsaL5ӱ=U9 'R\r kMyk\DPv EHE7eL gY>`SS+ nZz4^;Ae];'D +|[XI~sʕV5 {m4Pw1 1Pq (RcnP0MS쨚 ۯBDb[Q/<0> NR}WhB:'! JCLXeEB97׉r Xrm&u8HH?Bx$e[GU87RRÓYH8WXot,K>r-6c=c7v=F}E̙%lHʍrFF+vEfwY6v|/O>קL@FDP[,ۛngjTAMM ;U^!&yEN \{j9e+˜І]hNR҈^S ߍ@#2Ѧ:fB~Dܶs0 N @6dym <7V{3O@$Dzg y(ʛqLW,%ZQpCᦅx-_A{yͶmG56/9sHO;;cQZd$Yh|vՈNJ]Hrs~-h*4CVjW8"=QW~e[?l0S9|cAY!>݂>Gw+ۑm}G{4MO [Ɩ Y s&M2X\RVFцJɢV!a:{yb~\Y]'mq߫/hl(T}tO c\&`]}$"zrS;\ ;؇3%6e9cY×nw3ejRqxߌ9?XWsv6`m_WI<z} օ];i٠ĿRUa}:,ŀ4WȦ:9Ÿ8yFo3Kx+Uf~pj#Vb;@CRSnNL uo/3Q?.(̘ FֈmI7uk*G}0PI8E篪S32"aɱ!QWg$L nm-q`oޖ}B[<*z\߃bVQTw /{[K' 6r v1 ych%Z%k7ҳ ^Dgh =&%=K~$@NhZк9>uh/ͳaqiiT;sUq9HK \:{ϑ#bLwϱ'֢Y BNJF?06@kaEG;5̖RvA2wŊ)ilIYMtԌRXOl;l /z;>|l__v.bAv똕2V89εitr|>~`2g?#>){E wX!'[DZ%=}_fe^(`+v?V+}ݔ{ܨ:-4>&,VN&i:ƝP:Jj+8)6&̥l g3l(@$˿Ĕ>=0M59i;6pt\ܲٽ|5d6uL3xb:8w.2uqWnGk d]_6c27&&p Vya~jP0Iv.&J˓ \۞^|? .߫ut3u^I?PlK$1gM;f&b'zf,lBɯe ;Az> endobj 25 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /QRLXEO+CMSLTT10 /ItalicAngle -9.46 /StemV 69 /XHeight 431 /FontBBox [-20 -233 617 696] /Flags 4 /CharSet (/exclam/quotedbl/numbersign/parenleft/parenright/asterisk/comma/hyphen/period/zero/one/two/three/four/five/colon/less/equal/greater/A/C/E/G/N/O/R/S/T/U/W/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 26 0 R >> endobj 44 0 obj [525 525 525 0 0 0 0 525 525 525 0 525 525 525 0 525 525 525 525 525 525 0 0 0 0 525 0 525 525 525 0 0 525 0 525 0 525 0 525 0 0 0 0 0 0 525 525 0 0 525 525 525 525 0 525 0 0 0 525 0 525 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] endobj 43 0 obj << /Type /Encoding /Differences [ 0 /.notdef 33/exclam/quotedbl/numbersign 36/.notdef 40/parenleft/parenright/asterisk 43/.notdef 44/comma/hyphen/period 47/.notdef 48/zero/one/two/three/four/five 54/.notdef 58/colon 59/.notdef 60/less/equal/greater 63/.notdef 65/A 66/.notdef 67/C 68/.notdef 69/E 70/.notdef 71/G 72/.notdef 78/N/O 80/.notdef 82/R/S/T/U 86/.notdef 87/W 88/.notdef 91/bracketleft 92/.notdef 93/bracketright 94/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y 122/.notdef] >> endobj 23 0 obj << /Length1 1484 /Length2 7985 /Length3 532 /Length 8872 /Filter /FlateDecode >> stream xUT˶q Ah] ЍC @p=`!wB`^kOwf͚լ1VC$f9Ҫ  dd`vl`2`7((H[8@>!^!>L4 B$~PYC5,m ͛ iok+@ uB1@ `qHW!+\ . +B`C _ 7!Kk`c0'w7 @8g_rP*m,$l\l 7 k;0mA 韪e oO?uAlO/Ƅ?p6`w=y `u<gwbnA>`!~=wDu8`{gk\K7<`G\މP_O.fWNMR >Y7$7  ~|?$gC-{rw;o6Mp% _ —5/hbb%@p@׀p ?יp \kxF[kxp W))K %FrHpwq:& zA-0,ClSCe QYZ>va/#*;V?EݥE9!w9.înOtU'܎湋C^DձYy/d@{˴!|r:aoiRyV<'| {ʺtt'-x` 5{x |53LeT1qN\nJnZx L|bC:cZc' iHe) 5sɛ$w'ֿD2\ρ])#s yL=xe^#!0x;;r1 Ou1Ệ\vl\Va_b15Fyᬁk#~π7b܏X4 L9Ў}PI G:b` kHCv@=_Rdvؿ?p(?±vvzbT_QY jtx jF;3laYf]$uc-> ٝ-Ig!R~sWX)'bƤ;.3Xw#pҸ2zw-hd153곖i#i}c:H }OѨMEtK/{Ƞ><EMC>v~Ӈw7P~Χ*.f};/1!۫A__ IKEU|5kr5i)R.xwbPΑ|D0sAOMŹi1.Tyen.E,{؈"-n/N"@eNP"2|1DuoE-Ke LJE5Vwg!P7),]r(r"HD%kbGÇy(2|ʑ /2ڽtZOV;nfϔyP| 8 _${.4=4Wӌl?JGZO:q^{,?NJd`QQ˽p>Fܵqp~.JB"64$XrLӶv00v,Pl_B0BpױJ^q{C(Doն-a=,HQ$#ZbR%AG{#*Al=SY3 K0Xު A$Yf/q{~Js2zA8ׄoo5<{0;[W]|R5㒆'0TXED#[v{!l0єT9Zm 8B&=wT3٤5y"R})օzq0M273nٕ}c,!k?.WcyG01]kmi&.0@Ľ v,O-53GItlmaRRW >~-__^۱oEï>MI\6տGA~UYJlmԶ4}B1`aE2k"P7 W UQ5&~hRZ: k_'3Ixwq9 Ӑk Mrh홈leA S_Q)ŵi!J5m̲RUn}I|uN5pՂ -Nf e>vb+v#(k Hx|[i }H!M}31C*zP@$͵;{[sF @yꯚVqv w՜:螇nE⩭<W`Wr>81rb{J|&a{B4cƸQM R~iCGC[cRb9AuG>j^Lo4uӓ^5a6ֲM@QC_d~0NPHek];WH ?M3۸ގK[$o#d !<^T\*EҹdE2!xF4wҙmV6!S:Y#?s'-_*uZuDZTzM#;gzm|vf"ÎcЌ뼪?'˘DH FxfA}4lYBW:WUlB$Ѽa1 ༭!ɻ1R83@!BY̤/9*νr8\eGBxxI" @cyJPUgGZSm (ĬQr)_gxի(;G}ވ- ՃWǒ kq\%5FS.F$-oOX>>ѝ0ҡ %͝Vfacć.BtFȈp|h(W㰓:Uw#2in 2au)-[fq/lCA ,4yv^H|DlEU23[kvuAs$D!lޭaG͊}{z;02FJ7( 3/_Q+{4V|+g}4#u*r:+.ɳ$'JS IߑRV{$z {l",ڗ;lh 0ȲQgk*"."s|$Mgvc'yը[N֚ڍ qC[ ]*NV ݑOYu<4gi_ 5 M/6+b{]9&lԡ v;mClUޘ eO 9KDRq-HUhXcp?%e*ê}9ldpry:N1X/۞;_5X --3syoi3c-J  /yrXAa^Ibϙ[ϼ$P7DcNDJO9?A1xNn!fvWÐ`IFCai;: iYEUT9(UO7d;EeKMl|)Wc]3j#'mTܥjXTCY*J0\ٟ!ȀNqzu1cwF#01)EzL>2JدjeƳutp&Mke7vlgJg.hFZ i'<6m3%~Ru{ېܪ!Feʼd^nQrݧylǍF% a|k>F8KBζܴ̙i6<$qimT&*5z7-i^ Ufc_CmIdz&5:<~~^=Z-zVms^b"LyI6$a:[5$q jf #wuuģ,ɿr/δD+ Hqhg*;u2z3-ylI3aO):7x+>>3pz~d/ [P4 ~ >mD!`K H:Ilﹺџeg̀T$=]%P3! a@7p۶]UroH^ehwC76p[1=Z []` ꞧCΙlׂl9q\o)6j8 O~9ࣜLP l~Nt iN 52 i೛mV;,cU'Ol `V9k=~|^]ʯs>#ʐPcr/S9mx :lxb9Qvkoc\} Ub/*1:ߦW!zHXq ~*1 M- z~ؤDZg+nHJ@IS-d׹t`<7N6`7%>c׻UIWðv[ËKg݋I?dUNt>Ԏ\ 95G_ϗeL5m|V;('`JA]^@?|7t՝tC8-!o)ߖ*(Byb-Dq𛥦!oy3 ]Gș$y8^u25W'??EE,PJkR{;Jg61L)Odʵ^Q ADj}{BM=qyqyiHksQbb _םŶWU֨hFL^v[Q(J)LM?bAf<[M3 WXk OF_KQ(L٩3ewX']lU={In]LěE2>KWe<1s@4{#74r<NFkqIb}V N-8F!nG(KT2qTt¤!6Zw,8Y}[OBdr'* 625冷\p]v^ݲY3L55^OV@]رarh0S2<JUdn(nQRNQ#P k=Eyuz$RgO'ޢu sGD".V;"ҦgnLv(J%qP<4j ^hKKߥu>IWe62^'rB sW&?k6+l}0~_f.k(.FgG\C?z60h|_4qIU''#@#_6#FQmq"6]fF{f 9ˀ /&TV˶'&=y]*ԝe^KL~:7Q2P8\vz[DZO`ig||&¨Ϗ9LVؾrY1 vf[&}P׫1Gc{ |qc gpW9xj$eהG.YUz eϚVa\#AD ՜ɛ1nJמ}ȘgBV^tOX.K֐MOhM,rúo$B,fb7+6\˵V)F>uo/LF,|}a޼CQ8+5ByÚ\uaKZ/6`wժQ1 FKIr <[&'Z/mؒ g+gRO+NnHq+22cRG We./ prPyBH>Q)](y-$'tQ:iO>z-p59-V:nܮ;)_bJܜǼJ8t 'i4x^8*ji@J.U5d;I5Ǫ?5SlA̋ܲKXkHRc;8۟r㌾fĂ5bD2"ec%}zQQX VQH}J²M]q~p[(2y׃9~gG_7yh1_1dgŦob9FpbÏك8tEyH Vvu8DgIؠI4Fq/7R4Vk_^S{7 rK}Y𖤸]4c(V]L.c?)m$psڑ| O,/d vi<<\oL%͊t$`39?Qt}4m{l.[͎%KQDm0쒛^YHK [bAJ?`O]``;]endstream endobj 24 0 obj << /Type /Font /Subtype /Type1 /Encoding 45 0 R /FirstChar 34 /LastChar 122 /Widths 46 0 R /BaseFont /NWOQMZ+CMTT12 /FontDescriptor 22 0 R >> endobj 22 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /NWOQMZ+CMTT12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-1 -234 524 695] /Flags 4 /CharSet (/quotedbl/period/slash/zero/one/two/three/four/five/six/seven/eight/colon/at/A/B/D/E/G/R/X/Z/bracketleft/bracketright/a/b/c/d/e/f/g/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y/z) /FontFile 23 0 R >> endobj 46 0 obj [515 0 0 0 0 0 0 0 0 0 0 0 515 515 515 515 515 515 515 515 515 515 515 0 515 0 0 0 0 0 515 515 515 0 515 515 0 515 0 0 0 0 0 0 0 0 0 0 515 0 0 0 0 0 515 0 515 515 0 515 0 0 0 515 515 515 515 515 515 515 515 515 0 515 515 515 515 515 515 0 515 515 515 515 515 515 515 515 515 ] endobj 45 0 obj << /Type /Encoding /Differences [ 0 /.notdef 34/quotedbl 35/.notdef 46/period/slash/zero/one/two/three/four/five/six/seven/eight 57/.notdef 58/colon 59/.notdef 64/at/A/B 67/.notdef 68/D/E 70/.notdef 71/G 72/.notdef 82/R 83/.notdef 88/X 89/.notdef 90/Z/bracketleft 92/.notdef 93/bracketright 94/.notdef 97/a/b/c/d/e/f/g/h/i 106/.notdef 107/k/l/m/n/o/p 113/.notdef 114/r/s/t/u/v/w/x/y/z 123/.notdef] >> endobj 20 0 obj << /Length1 1252 /Length2 5868 /Length3 532 /Length 6646 /Filter /FlateDecode >> stream xg<]NtwfK3 c{D-z2J j-DG'}?Na $.-"*-&JPAx .n$J$ 肽] `x`0_3F/(H{3N(#M 񯰣ǿ|!H/)7$m!NBz,**8 7 E8BL}9ed40zC!Po;;m@HD߄A00㟲e͠ߌ^$` AD/S; pHp!dI @XHFO$@b!B!6!B8f$ I]V$B* I&aЃ$M*$zoB&tS$ ;DqѽA@?P~ Zu@tB @D ZDu}@oD_B Z7ocHCD$@ f'(ׁ@!sH׬PU8ίS^LwE,<Äk{4Υ$bb 6S? Lɞ lc0; `G2m_ Sju2ݼbnՇxY0z-}z"%sa&1Q/9EXȲ=+cEcVSW&"B]c[O>%Ei7Xcv?3-.SFP4>_)1OȜ&p{[ԽX)(ǧ҈Ӓ Ʒw`4sM^AuY3wָm 9Xk&IjdeqsjhG-&E]60y4츪:nF h6/d,*G˹xˮǻRK#C_4~̇h&3\1כp}_ F:ks 䱄Lm J_U7rM(_<+9^x!]*/`Dp"LaYӯ7W֬?[ ONěDy dN'i>tW8/m03~óHtct宅c&LCq7o,1괦vݍl0 Y8H>D/xd1P*bR(uFa.yð!|R]5$P EdbY+~?\"+Ӄ k"UK΀xn6<#N1 U`ːQxȑ<1*'R0F͔[*7e߽; _7K``oފڵ6B~\U…ٔCnt]w+Dcr=eyÝQrFm arV4=U ʙMohey -L&N,' mX`g/xCe'Rr@2ii4 !|u4|pj[) _ӠfL;>'7xoD?O#o"$rq<8ZhZ-kVA ?Űd/ dEht/wA3r,UïɶݝKlkU&40PzHL~ϰQ& j72fpQVмt)$5bJ&s>p~ɋ6 }D!s.:WJI)= O B /{P*H6^.~;$LwOO^fr@ū6'{;.Cܔ9#ݕ^׈u;Q2VI+,8$`#XjA EwM`F5i3\+S7< J!T4}B^j})')ٷk,y:5e62DNk05ɺP,W= ݵE/kC \xIpEy5G<7|qQ$Wi\73źcY§p3:NWQGeN@c#`&m {=gh 8=l4Qqz1 3(6)tf ịOsd~rOmqjM6ygz=r+x#(G1A#{*IQ|zVHj wpWgz"AIe H]1!'!lqIM'َHͷԧVդq8ұ2|l69ĞV98Ng?xI[KՎ5U!Ns0HIBzXHPi^cZ5ӐȝɐlCfy9Lo[/LVT$֛EuzCKIBOs0J恶ZY8~Kt!&>6au^ ~,T`s܍|<@4UMK_V둯Cmȇ[Ŏ[\ Z tc Ic1_,в%\wڞLB*@&/S![wx1ʖJ~jqFFWBĚor8U76HNgWo5o& :@G16Yj^̭4C u1R=zy!Gd -ŚB%OTERlLsGQo&`R :Z0nbn振%æΝM8D !I򆃣EsvwIg)ZЬi(R蔷hħ5(m4+x㻋Ӌfq^~՛_x틒}0I=_D aBxfvIJkRMt|Gk3AMf o0}+tDc}Raޖ}c9v83z/u||!TsаZߐ⻦u&/{Oh|I&L_Z33HJb`翈|Iz΢a),8-M\hhk! ~' cQ)N}Nf .nCM*3(Tc0 5vQB'5I&_3.5㸧F=uP䣟WrG3_-uإv#mZ!'69ɦ/g^f,;Hjaoz);RPޓc%7wWAz>B;:/M8ES$TRsql6xV;M3 775d.Ogż5JJ1\yBڄs* ]8sN zEKwWIa\RvEL(l5B5WrХk| @pwgp[[pFG"tz^lClu-@ǽDp㹟g G&|ʣ`&7 O WD<9 oszӢɤ,-:s`)TtiyD+A1cylF#U}@}'ti3WJe2Ε9P :ocW=ktDi-s͞$vNޤgN cِ<97m|7ߎʝTпb/(MGx>LV&O?|`3ɵy߂=FW-7H,:(hV?omOnSQsrݬJ+yqY#%kzҡ=/ N 3m WTn͍<1 l㭧=Wu3hXbfڂ Ek%7ݒ 3YExx©yU^R%~+ޔڱ&du׌]ui_VB.ΠU~Y5cOщ|`a% 6lxKR┳{rݳA9bK;\Yj!^`ŞE1ltoKkeJQb7Px "f޶ N$dLeqRv&\χ#k5PgC"8€D|ܛX-{dV%4~!M@)|x< R!Ø)WO~ (=ԩ'o񂩃@/P3X[i{x8'4uG!mZLjisW)`1E yh엾:\P'wHV䅏VtS,]`+i#OŽojjpݽPٿ7DҰC,}RJl,9$h;Gpq64m9ƻKF=E!s[&?gƓ^G-FL^T˟<$WyrmLZһ>=SJ-4l!7BRO\gVM`v,O.2Bow=XIC xq6ܐYVq)4*M.Q;ɳ[#yp3xzUμ˕wR-RG.(fvTT6U?-]LcLNݳ9g+-> KoL<;YU2cix,hKJ^$٢Uh~. yF jg6Nɽ6PW*pmeZ)?atP!+.mq_W`pvK6>Dز{:a&Y:6 G9F6w5#@Eǔ‹Gߖ_^Zk*dgtvO IXh%3ThCįID芋Z 3YŒ6mLڵ|ivӸke* _uf]g?եs-SKֺPa߸.fʘi8-Dߥ_KIo6 &SIUVT5%s/BQw*TtttŁkZ2]__ycВmh5q?hjg+_r5 ]1e:?tӒEoAvd4E/d x>޷|0)AT)ʃUKrINK:tc `sRRAZ}+^n;QA7Ue3#pZAo : DYi8u_y1>}]z,v)ZnF+9et\'X%2 ;#x7CT (˒[0vİ,m> endobj 19 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /FZRUOU+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/hyphen/period/one/two/three/colon/A/C/D/F/H/I/M/P/U/V/a/c/d/e/g/h/i/k/l/n/o/p/r/s/t/u/v/x/y) /FontFile 20 0 R >> endobj 48 0 obj [375 313 0 0 563 563 563 0 0 0 0 0 0 313 0 0 0 0 0 0 850 0 813 862 0 707 0 880 419 0 0 0 1067 0 0 769 0 0 0 0 865 850 0 0 0 0 0 0 0 0 0 0 547 0 500 625 513 0 563 625 313 0 594 313 0 625 563 625 0 459 444 438 625 594 0 594 594 ] endobj 47 0 obj << /Type /Encoding /Differences [ 0 /.notdef 45/hyphen/period 47/.notdef 49/one/two/three 52/.notdef 58/colon 59/.notdef 65/A 66/.notdef 67/C/D 69/.notdef 70/F 71/.notdef 72/H/I 74/.notdef 77/M 78/.notdef 80/P 81/.notdef 85/U/V 87/.notdef 97/a 98/.notdef 99/c/d/e 102/.notdef 103/g/h/i 106/.notdef 107/k/l 109/.notdef 110/n/o/p 113/.notdef 114/r/s/t/u/v 119/.notdef 120/x/y 122/.notdef] >> endobj 17 0 obj << /Length1 879 /Length2 3088 /Length3 532 /Length 3706 /Filter /FlateDecode >> stream xy<($XFcf}ɒeLKT"d7%)""uRwOzy?gtŻ`8!PM,-p!k`mEq:(F@@V@Uei h} Ԗ)R4}0,LP$ XX ,hz{ 1D !*B W,`ܱ8'CP+w*C LlJ4x7pŸ`xZ7 ?{{|~5ˣ|(>$ 0b?6̙`\>f I(o,ZD=lH̯0~9hiXJcPXɒϪ?տ/ "hB?xW,UPP ])s a Oh3 ύ+0_R?B=P$\Cr7T`P ,7&,8APy*+(!e8<GuUi+ݰa0A4h Sw,T=f{UGO^?Md[yaEw />G]{>R|V2WsdOY]E$u,XǏӵԴ]VT;~;ׯ,N>v";3i?*3A<ş[1͌='4Kb~O|򄃎DEAѝVCM歷f,v. ό%Y_m><ϴ[_aEd2]?yGtԅ95. 宋9YOfyQc-=*֥4C9&oV|ouͭI-E< U( \<=*am|cr|Gv,S_~ ;{Cc8atEr[pvH72[ (ʏiN'w !bR&HWwZD_v{9>lq[>+)ֳT*{2 k j b~3 ^SuwYь~2*LGMOb_Ē'`(Eُ15 =bb\k,)޾vhhYlo3vÀ{;o nVJVݩ,r(('nV䅇U*kNҝp WM>t;o-Q"2Kg"xuD&"w̵0ҋ ո<<}9A,Iidz:~u4jzrpb/p| VEAYQ9ЕPiϪCF>dhxY Ӓ gHW$bugGf2ñR v\<#ST?w>VD C5`͟;p4:.H-~Rlx@d4!,zS\]?a4l)[Y~1g<" ž^E {i%{GdX>až> MB:6RgRo" Sfc(YDJJ B0$h^f`+`{@?9WQK[BXxl GH YD3`26(*Ɏt+ n1ze )ƒwΚդTȇ.ӣo=z͡q+գD o Tލ%)e$gG 党nr:"2)`})xL`;kc%gI8a]]I'+5I =#Ȣs@HZah[FG\?qjNSoEQ.b-M2BکɳL fVBKv?N}~8QgbA: CH8F+D{F8=ċ6zizL@{'oaQǞTFfddD)6~rG ^#O5To !5 ^OF&SxV% xjeFRrS#ҸK9 1lC@J|vXwyVg488BIIX4}@RsLT Jd^E g:7m_`yZvDɰL}c1J[8 kw-cb0Vy%I0 3-\U^\r/Sc|\g/UwMNVK"ȀÞ+btJG^,l(d(OKdk K0;ܜ̻I^=We^؎SqJ!'o8_FނngJ` NM1m uq|v/E#f:!S^7Ή1UXiRz>>~HP3A'TȦtۈe:{\h&I 8Z+@Wa5F4"s;ZvاE2srڨkW1FvܦwZX!GʢTAhDAi{ yy8Ȏ&٢x-PZ1td.q2r̅e%1I>ԡf}ۯ]q'U G}<Q+J*^Q@vK%=Yه4**Ǯk_2nbœV\\{al7۪[5t5Sw9JȋxspҖVy72;V; X36b`ç)ۆCCw/ =Kk16lomR6; xg(X OZS'?s*:H̵l+SZ2.rĢ[5RZ:Mrp`KwROfKCrx-b/(Lm5endstream endobj 18 0 obj << /Type /Font /Subtype /Type1 /Encoding 49 0 R /FirstChar 46 /LastChar 118 /Widths 50 0 R /BaseFont /HBCODT+CMTT10 /FontDescriptor 16 0 R >> endobj 16 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /HBCODT+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/period/a/d/e/g/i/m/s/t/v) /FontFile 17 0 R >> endobj 50 0 obj [525 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 525 0 0 525 525 0 525 0 525 0 0 0 525 0 0 0 0 0 525 525 0 525 ] endobj 49 0 obj << /Type /Encoding /Differences [ 0 /.notdef 46/period 47/.notdef 97/a 98/.notdef 100/d/e 102/.notdef 103/g 104/.notdef 105/i 106/.notdef 109/m 110/.notdef 115/s/t 117/.notdef 118/v 119/.notdef] >> endobj 14 0 obj << /Length1 1259 /Length2 7352 /Length3 532 /Length 8135 /Filter /FlateDecode >> stream xeX[[).݃Kn5S@ Z[)Z܋s>޽yN'zk7c,m=nkW+ W @,,rP%E!V GLP@L 8H8C`K%⌨t蹂!0@;< b̓ V[{lJ*.6֞nY@=R?59IkW'5 p⊞NNQm\o @L_=,+' @|(@TH4{B9G{ o+XbtIT6H~TWjG$a#DEg'*_.Tz#gQgKtDo;i-=TGQԸA~2G`+{o]uPDV=RxHz=<?މbZm?ד 6:˱yql|3ofs?RVd)I5F'/)yJڇ!$~ Mtw͆WOz=/T]*Jfi)8/Ogم?6_)vX1eqnَ'_5Z%Q|#QRۥ& B.Vzu-U( E/ #;!]BbYK(o o} ylO1B7bɛ0F6@>U0e,Ht>萰waqdIA.ifawtѡޘ ALX!iHɌQȀv\#gv0JClIUST&: wCqԀc/P}!x[:م s~c&+mc'20(k1Z7|eHAjşn&}ói &/S+]Ώ ^JP"oӃ83:<-$̭~ ~ȄC--^}( ȍ̫Cso"PT`J;O~%oӑ1Z Fp=:&TaV_&ІԲ5gs$Xz-fcdY$^"3$bhg]׎2Fݛ:lO#i['kP'$q/鈛pSz).J"@Ýs6V^/K}7Cv :~^ؔ &SG5BKdž[ऩ6Bq/W@QI޶z9wG6fnD^:麄c"ĝBZ7~aS?FFFwnҳ+88KeM 4 DL( <'o[m#Zw&=6{^iՆlX0?)h+GgًSSfohAF{!ݠxU0yw=7}gl311)@nK?lv*}\U6 0n&^6BObIf?RA’5Kw?hEÜ=}c^1c.hڦ;\v/FMB?QZ OjvgؕOfE&lưu=YJX*}͙-4Fz@ 5E2cpZび uwgEF-EJгK\Ca2;j$7̮B#pEmŪus&m!6aK}Rf(T.m9j C30p.JNJ8aid</U-=a8K_ Yp\='Ɍ t1f%TCӇ;|o$[}벷f?Eϊ"8VJTX`Z67N K9{on ʎ x|fL. Qx < _GZɨJq|(mkOzCm騑h]`֮qwu?vF0mԴu5Ѝjg`\|Է{Iy0v郋(^4JWe=NpQjzsJdaifJS+Jv\-m<xkudj==V~ln.>"]]K'yAmclu0 {x̞ZlD"3Mqr要Z0\f շ,kTGkwބ[4{oIq9L6'r3|>H~I D_XN^7 :^=OcrV2_K]0Q`[Giԙ>$MZsuclK7g3q/>_)!mg%un팾Ru܂, 5+*ܿPmLi$ ߝ|b^R#hogiJkGKGiivBzq>k-<( ;*9D['m2dmV^SoUg1O p6JMseAI9.Mݼܽ׿⚋V(b9w-~t]7k|K>׎~2i\b%)9x%ժw΅K2Ǭj-_ϕH!\c[P^b?cK^_kĒK2P"̲Q?X\|* E._|){*H(KBO˟6:g1ҋMq"}=eboD<)E'dB.hq>W\WMN`)e 2ه/rgWHh^n?%6<[cUNГvʒ|n3ϔ؉Oa)n>tur>@ v|qx^:57 ~z L5f.0Se54|(7aai0#",q$zvp8sR:G)$S@H`q0PͩloHٗnlg2ٹc.KI]+=z~'"?FꜬ?7]s\TP2^czHI,FԱ_廥P x m2mb d(ۯ9[ugt'Ro=VG Ē7Y <ÏH_ Q+|F!? ӳq m'#su"bN Š')7KIy}%- L0t4?Dbx@3&(/UdCTy/yuzNg49hgvTLfvȺ9.j yЙݔٱOټVCgt`!%_&Tjp'[c!Wg ҿ$ϖ+Miď'SK]濐njzfUӳz}k^'+FGo('~q'a ضJHΊ +FZ`0ʪ3˲"2x5Je[L pRdig?AznmM s7L OiL}\l=s{Zec3iH-,/ Mh)^@Z\~&(|FƑQMoIͶ.AxK\En#DA2# 8 {<6J?DQXk{Z>l}^u%0}y+*kR.St2>C쌢McӾͷ4oOD|Vfͧ7}.b)#¦@aO$0iJOkDt:!sAu S>adu0fRXQH7fd`,xfP")WAu:=,ԮX}ᨨlYP##Wt\b n[^J?+`Ym#w""qpB\1Q=$U|<듣A=beLZo6ߓ^Ir7@1oTgyڎ`~"ǧTpf/0%zzBlvC[4jb@kU9pIcy4ߴnw ;XE"dk<_ M.烧)es?ͮaTˈ"|rxINKp$Lg=) $\4) ԛD.@S]?`'%l u?Cendstream endobj 15 0 obj << /Type /Font /Subtype /Type1 /Encoding 51 0 R /FirstChar 11 /LastChar 123 /Widths 52 0 R /BaseFont /YUUVSR+CMR10 /FontDescriptor 13 0 R >> endobj 13 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /YUUVSR+CMR10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/parenleft/parenright/comma/period/two/N/R/T/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y/endash) /FontFile 14 0 R >> endobj 52 0 obj [583 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 389 389 0 0 278 0 278 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750 0 0 0 736 0 722 0 0 0 0 0 0 0 0 0 0 0 0 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 0 392 394 389 556 528 722 528 528 0 500 ] endobj 51 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/ff 12/.notdef 40/parenleft/parenright 42/.notdef 44/comma 45/.notdef 46/period 47/.notdef 50/two 51/.notdef 78/N 79/.notdef 82/R 83/.notdef 84/T 85/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p 113/.notdef 114/r/s/t/u/v/w/x/y 122/.notdef 123/endash 124/.notdef] >> endobj 11 0 obj << /Length1 829 /Length2 2799 /Length3 532 /Length 3391 /Filter /FlateDecode >> stream xRyM7ٲˊ Rzg@>}Ȱ)I$\fKT|:_[)GZ/&,*n ľ.Jk{OLrAn[s ٱrlM!@}"ٟcnwkּcbՒiܙ6arwr_W u0 mκiJy(܊4(,ru8wNKTȩ[кP{S~7!ț76w}On@mׯq =c$Zt Xݮg<ۥy#jܱRJ0,ҩ{᪆.h$QSU{ͮц>xB[S*c~'6ò.- }[Ӱgش ~sZEz.9"9ļfKȯGpх$]4-%YEs v4|F\,,u`-YKJ#.*'+!拙ZNwK&e]9{ǣV]me^@89gD6',U>vnER\,T}CG){ker\YyMy-Ѓ{a,ӂNfkyC _Q]VBp突6H`&VZaQˎ pճB+=:fcYF4#]Fĝvj:XTzm*~z@rfйabVS~w 1ճ1B}zCG)O@せ_3PEyOr\`#}<\;ZD ѩ aXd6ȰӊeUnO n+ETJLaLM?#xKqw[wІI@@~u[H*ӧKnR%Z:{Z;BE{b:TjZ1*ˆh.?~j!?_h.'hC24Fl&XkxV-rA[S,S|Zv?0-I'WhK Q}1T>.?>^=eMr-z=e(<5h4ZyY‘#dAƨ=/,XƤNPZdy+{򾭶yxhe~&` y߸QNAdd Јr{:)CzYGNY!}wi-L̠ E(i.B(/ N#miK‚Eee"ҫJyզgj}KϷ#{J2CCL}Q{&4}vYqglQ]薋GeE}.#lhu#/IqB8> endobj 10 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /YGJOKG+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 /CharSet (/A/a/b/c/r/s/t) /FontFile 11 0 R >> endobj 54 0 obj [869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 639 511 0 0 0 0 0 0 0 0 0 0 0 0 0 0 474 454 447 ] endobj 53 0 obj << /Type /Encoding /Differences [ 0 /.notdef 65/A 66/.notdef 97/a/b/c 100/.notdef 114/r/s/t 117/.notdef] >> endobj 8 0 obj << /Length1 1639 /Length2 10297 /Length3 532 /Length 11229 /Filter /FlateDecode >> stream xUX\Qq <@%]  .d<<7U/Z UTa2Av ,,9eV #3#d'j \N^6n^f$ @-BN\![@h abdPX=B66p(@SF$3hni!);3_aSnr::`IXdg0!1Ƀ`R\F1I[uڻ8r SvMhjbRF6&Bv6@BN@SEKg qJ Lb*"rtZ)Y9z;?:Y0xv-:̌,Zbv& SK;9:y w8^,K;S;fb9s09"c9+dؿF6v hjlw 0;3hg4+_ n50Yx[8cU@B&O#O,9n9-s\bSlgG&V#x9Gf t ,L>[4ϔB 7w"-C8ni>a=:Evx+M8ĥ.yj^yۓ7}9T/M*̼:UU=_'qmMOQ d#UFOu( gpCOL٘ Ch[u`>#|}ս9XԳZXX0c'ΏMom{~`akKΗՈSupZ^FkOz¢S ^ۮ#`${ɃU+Ԍ{)* ntؗEt_yUჾ2?#'sXȎ;G@+ a󖐎S ?зdm + = 8J3cpϖt^.jlLb{a(vRb Gm ļzyT Xv25侯YZFJ#R15Mq5DR t=\@J5,*mC:q3RZìǮD$=abr6]BFJWeyi8cIK.= C3BWoVc?̆ԂR4T5L<:s"ڮD%^c<~RQS" AmJh͋OH 1CJSϨ 00_;[X!9^9nJ}~\>PZ˶{GuxRW VAMq=miN;CY*Q)#1E!&neRf `;C?WŌ*@0-\u o]R臓/EŹNDkw[}*ɤI? @tvY#%w6ph+i 08Yb.~dv=Kw\yfle,bHr,I\Zz2/+WPW@//'jzaZ'0j<U]m~0ET,|O5j.3n z/8`^]FN%=';֣#~579f)N `sA3c#@Ep!c1Xv9*F bT6ƈxO %L r xNb]\cƧܯMϞPqkN:QW r%+[]0~ E1C/ ^4^-$|t!kV}F > XV`$ H..맕Ю-؁ˑn)ޕsްw;|U:R-2xb!d\&Է~Y xS$i)G=e4=NZ5P+;ţ[uX T6#ܖ&4VOtDتGͩ;cEKW1-玿u sKwI]vDz)::_Ɣk1,}ʞcwKfi,2BBTmv>$"oC1N!y.1E3]YdB8#rnc$Yi8:EZt5> &gV':6jVk.w|*~Ou; Nv59F1{2_9*5 %eirgvF 017e]Ӷe 7BQ! ?Nv{ZŐ:k EW!!Ӊy1e@NuuۻFʼnCȻ)ʗ9uVO (|p<"n% f @ƆduB35VFkrMA+VwA~vdGR"ն&{ȜH3۠^/>Eo8Tli$HW`r=X-qd9RU Zr%nɥ4.7)ZlgG 'J&pxv$4!8 r2i) A&ܖ3u" ~sZZ]0=6'c *pnDf+R(!o !5ϩ9Wڳ~wUK%h <c~T}響L-yuKwSLϼC:}][;fM$[*-CW@LBL\;wԷZK,;Ckxv Es#pzT耬. + >zD.imlEh\j@'`8ǎ"0ҟq=4,xBl$[]X3Bik.tn0o·gPnl.`fT h15 }#ڮX x/ !z*V"ĖuavFxVdGC.1t \{2;0O>%# /ߒ'Ɨ Un g}`'LG SNwؗK6?]QMdWomI% &M3qT\ߜ\P\T5%N,lRgpx6&@ϲ5ޯ'ڤ;CSb^@uƤ_,""F:F\֗oH^+C]F Մ&%}\}(_apԥU ݹ7"Qb/t#Q# 5CXMXWwUIB=:5+8+1ο&ս᮷A`?5dle;X64z t>:yqmA`tB(:ݤM;Z͏{GQAZZp>pXHy&'<8N֐bAJБ˞|>R4Q4OJ3=:m-S<գmG$)`"grM# <@hu ! S@%F;bmVjEQ/J΅qڝԈ7gW- Lh>7:M/a1v;VY(CA{1:wPCL _~c|>qǰ` W;!+ץ{A47M6 F/h]3 EsTv02@[ضmm,͓ɹ^=-TkJt ?Ӝf LόcV\,C"8k|Oy{=.R mM1qj-B^6\@D&GAR|b`g#7Zm1/۬P̈́7@\每0Oܨ<ޮo]FEcTɃ8DҬ/KfpdϵߕOɝ6#Dd͉5OY(ZP4['+5ˑ"1~%|BUQ."d}jLZH`U0Z,JGh@g"YXESxwGCyH[\%$akaeXP>ò'=F*\ڪQ 8ֶs 梨`kpV "L<ɱVۮ LA(WxD+їJ% r'є:aL"(_C{"C䟓)HVze,|Ugn_r]ͩ>}""~KkkllqdPǴ_:tLGsbGZ`HnO$Jug6I<<@?k~o[$n!sK\½L2 eZC5zJ0vNߏe'}Ni&л~ro{ArGE'sݛx63?R9J[i׭hg%Pn4 @Vp` c3ڎZu}o-_oltTb(#G ]뀜{{/ʜlǁaAR)h-ڌ*^L.L{HPލAm493Y?J+Ag ǡ)ެU][p`H$fm8ŤZJC`JS8Vɏ{Mo0hY[W[ڷxO {`7='ǣ? gXq:Q@eZpا~<鐈/JF +B,|"&Sa[IEH }Pmgyˮ%ե5Ԅ=zS<>pc1 %F˾,>sZn21Zz =dZקRzzy#U>9Yc-s;tH cCrb1q|)᧌@Ta]mr; Ijbvg_BQ(Ŧq0hf=>[JY(*a?cA9HL!;:MTt&ę.Qs55"t$CX,]DIT.jhXJvhNH tߌ\hagmp(J$1]S@3!vc;(w=n~ȱkH33UdW Sf`$- q+P^8bM#%c. 6= ^J!`\ɟ4SSGhFV~لytsi;.*{==x`ZCT߱1f-G.toQX D NjngJۍs zы?yT|o۽HHѩո8K4oϾ7Hg=ag/eCv3<ߏ쯷{3olhw$1w:Up|Y6I~\ungDI$ ]EJW)&酋 ,"`%/LUaa *j4Ir#MRxL2&B.7y׺CKxC!sʷ3 }{Eda;5 b43ekf.{1}zm AEZlLd/:~اvs*o!(g 3v{쪢 #$RzCqrʓDC8٪ҕ7!;]_ꬠ+ /K-G, I՝Fl|v79>Wkd" }yV'YM˥w<ȫP#2OC8&#kb4ƻ mѷb_;wB((#8,*D W[T~'*2wbNjQ_*oB'7vh(>@6m:MN1\A 2^]#j}CouYf[ao OU;KF_c.lDo[k?H]LU%GQ&FeѮ&&;? `JmګMW@.#>fW|Gإ~>yYx f_%q+n^ M2ћ ǀ$d/'{YrPBA#9eb!A۶yB.EdS= *'àO})t ' &B#<4̂guAC1KcBGVCB52z>7R6Kl?>-3X=% ^&1B(>҇A/:57Cœҳ'6.- UxdFĥՓY Ѵ iem0y a]u 7`ɛR~W S, a^#eΖmuAbpO [MArQ0'MmN. g\Qn|ՁKu줯Ίe k @x["Usp,~./q1Nq*K(\[{ZAmϔFY},'  o]Ƙl]/mG=&ve<ص rT^=n3Tj0Z*u?cۨd'%dZɮ.q+_QfVwV4mݛnKu?I\G7MT}S ~:'斃7{kMhlmj#A&ףKlj7pB gn`$QܶڽQ .bCo]1O k.8)u q7_%2H颪e9X&X{9F,/wӾcJ4/7U#L3{M]Pxϧ`pGNO z괨cߠ˝ΘU`( iAԗv:zB*aLTZ~rm`(CM@tfbX(L6;e6DjܳR7 ^ɎsF)s= '\dyEXv6Pch>Tc[4ذ7{)brvzbx/^&=nZ?3~~*5ZC3 :r\~{׶0^ȃGcHUZ7{Jah5ߜ1}fp:n GW` zE,2 Bw0vG2QBr6t0˫h,J04C:&qb1nx?wA/ah鷢!SA4 @tw)z3!ewqv刿 BFVh VJ԰yy5e?p uA:fP̯[,}c9:f x5"gjLj(BE$>R]*헶Y.j_cn=_ʽ5 L)dܮ#cԚ#(3ndG"A>,7eu9sz^kݵ(G04#J$1`rSSD:*g2:yPBk秢FyhJT4\RhJMP6f,u3Tx+`} kW5Lk.C -+xq * uAO8ntP"gTG껇^uH\,Bl{E8U > endobj 7 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /ESRCFM+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-34 -251 988 750] /Flags 4 /CharSet (/ff/fi/quotedblright/quoteright/parenleft/parenright/comma/hyphen/period/zero/one/two/three/four/colon/at/A/B/D/F/G/H/I/N/O/P/R/S/T/U/W/Y/quotedblleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y) /FontFile 8 0 R >> endobj 56 0 obj [571 544 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 490 0 0 0 0 272 381 381 0 0 272 326 272 0 490 490 490 490 490 0 0 0 0 0 272 0 0 0 0 0 762 734 693 0 748 0 639 768 734 353 0 0 0 0 734 762 666 0 721 544 707 734 0 1006 0 734 0 0 490 0 0 0 0 490 544 435 544 435 299 490 544 272 299 517 272 816 544 490 544 517 381 386 381 544 517 707 517 517 ] endobj 55 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/ff/fi 13/.notdef 34/quotedblright 35/.notdef 39/quoteright/parenleft/parenright 42/.notdef 44/comma/hyphen/period 47/.notdef 48/zero/one/two/three/four 53/.notdef 58/colon 59/.notdef 64/at/A/B 67/.notdef 68/D 69/.notdef 70/F/G/H/I 74/.notdef 78/N/O/P 81/.notdef 82/R/S/T/U 86/.notdef 87/W 88/.notdef 89/Y 90/.notdef 92/quotedblleft 93/.notdef 97/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y 122/.notdef] >> endobj 5 0 obj << /Length1 946 /Length2 3211 /Length3 532 /Length 3859 /Filter /FlateDecode >> stream xy<-QI1voGԘ c,clBc2IɒeWq+{~>_빮9~s60qRi*kf Q 2ºXĠ8*QQھ QTSVgt1^x, (R=X$ ̠87'EE6K(``A`piF#a8D32FJ^X)@bRXc(<G`c(w!(N7L.nBC=hH 0^80XWz3CgqPvE!?CHdn܀Pgnҷf֒gDl^(ɐ,2pP )__NݥaH4e!( 3R6B @@@1 Fcp#'! 8e&ϐ2eD!`AFrT_" R=AE R1 p E'Ttt0ARrr "(ɫ:/@~.\3np MM!fG_gӱ*QWYGƀkW>=&t{߲Ew%!hxA҃¤יf;u'en.3&Y!}qzV|t^@d~Hs0xp/[ȎaH 5r{MZ˔84x4*Ud[؊we3 (+a}jIx!lI);! f }Tie{]b˲u#̒*éN {o}/ Ĭj[Z𽠺"#zqV [*aK D{"2s?]rG<fJ2w:Z*PUi;\7!ks:9*YK+Z~_.ҼΞ`3t|YΨl;!'NW?31 u7%yM4Y厮3'ˮ}sRVVX>/Wh Oo;4ćQdV[Νl$ܑIcF̭CѯIi'd1}ekϜ%5V9Utp]0?dvIDEs'+ly~qq[gDsք 8W;t㸎W-TMvGIM9E%Xt4 N޴&j|/xr(\(MF-Tiew#r! ͛$tˁ;a=}z;79?Dy 5%`^/]eUV{/y NOG2CN}boi}IR8N7150W&}ۃM]O}z=HFm#dTc}SV1;Iݠv"F96ztcInbqBc|7̃DAa$OPr:d~1xNrL%G\B$7*Pe'x"1NEQ~z2Ȏ&jًqy\/ި՞T H-YS~o}7k2[ҵ]0Hjyv {E.D\25h؍.{ve`|'Ԗ?2^gR2`ɼ-f >Iߊa8vmq"";%nA{"ud6d]Xr3plx锺WYvn6`XϿF5XB AiǧtzWuB@o?k8q+Tu/fs`f曄55+No5E<c7}?`8|enٰRMv+XT5Gw Τ BטHBz3kv;IEzXJf̥)l~! |_kFلJDeu[mċQm뵺>dzYg[; 턇⭢#/n/ 򐶕;2GX>U 3}o>"T\Y *UJϕ'U.n9Ph1K#'o6^$Ja&suZL4n"en(dw>4pyZ{pW=Sݨax}Uk,-V.~s;Oe:%CwY6jQj'`(xBOendstream endobj 6 0 obj << /Type /Font /Subtype /Type1 /Encoding 57 0 R /FirstChar 46 /LastChar 117 /Widths 58 0 R /BaseFont /GMNEFR+CMR17 /FontDescriptor 4 0 R >> endobj 4 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 /FontName /GMNEFR+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 430 /FontBBox [-33 -250 945 749] /Flags 4 /CharSet (/period/D/P/a/c/d/e/g/i/k/m/n/o/t/u) /FontFile 5 0 R >> endobj 58 0 obj [250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 707 0 0 0 0 0 0 0 0 0 0 0 628 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 406 511 406 0 459 0 250 0 485 0 772 511 459 0 0 0 0 354 511 ] endobj 57 0 obj << /Type /Encoding /Differences [ 0 /.notdef 46/period 47/.notdef 68/D 69/.notdef 80/P 81/.notdef 97/a 98/.notdef 99/c/d/e 102/.notdef 103/g 104/.notdef 105/i 106/.notdef 107/k 108/.notdef 109/m/n/o 112/.notdef 116/t/u 118/.notdef] >> endobj 28 0 obj << /Type /Pages /Count 4 /Kids [2 0 R 30 0 R 33 0 R 36 0 R] >> endobj 59 0 obj << /Type /Catalog /Pages 28 0 R >> endobj 60 0 obj << /Producer (pdfeTeX-1.21a) /Creator (TeX) /CreationDate (D:20130125175457-05'00') /PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4) >> endobj xref 0 61 0000000000 65535 f 0000001987 00000 n 0000001882 00000 n 0000000009 00000 n 0000072686 00000 n 0000068554 00000 n 0000072531 00000 n 0000067330 00000 n 0000055826 00000 n 0000067175 00000 n 0000055355 00000 n 0000051687 00000 n 0000055197 00000 n 0000050752 00000 n 0000042340 00000 n 0000050595 00000 n 0000041724 00000 n 0000037741 00000 n 0000041566 00000 n 0000036804 00000 n 0000029880 00000 n 0000036646 00000 n 0000028813 00000 n 0000019663 00000 n 0000028655 00000 n 0000018407 00000 n 0000007692 00000 n 0000018247 00000 n 0000073355 00000 n 0000003835 00000 n 0000003727 00000 n 0000002138 00000 n 0000006257 00000 n 0000006149 00000 n 0000003940 00000 n 0000006992 00000 n 0000006884 00000 n 0000006362 00000 n 0000007325 00000 n 0000007085 00000 n 0000007570 00000 n 0000007595 00000 n 0000007657 00000 n 0000019145 00000 n 0000018834 00000 n 0000029463 00000 n 0000029170 00000 n 0000037335 00000 n 0000037091 00000 n 0000042126 00000 n 0000041941 00000 n 0000051361 00000 n 0000051048 00000 n 0000055702 00000 n 0000055565 00000 n 0000068078 00000 n 0000067720 00000 n 0000073104 00000 n 0000072911 00000 n 0000073434 00000 n 0000073485 00000 n trailer << /Size 61 /Root 59 0 R /Info 60 0 R /ID [<7EE01DCC7286BC170E3C685A32A7E2CD> <7EE01DCC7286BC170E3C685A32A7E2CD>] >> startxref 73688 %%EOF g.data/inst/doc/g.data.Rnw0000644000176000001440000001253512044275212015015 0ustar ripleyusers%\VignetteIndexEntry{g.data Package Documentation} %\VignettePackage{g.data} \documentclass[12pt]{article} \usepackage{fullpage} \usepackage{indentfirst} \let\code\texttt \SweaveOpts{prefix.string=gdata, keep.source=TRUE} \begin{document} \title{g.data Package Documentation} \author{David Brahm} \date{October 31, 2012} \maketitle % This is the public version - no local packages needed <>= options(width=80, digits=4, scipen=5) if ("package:g.data" %in% search()) detach("package:g.data") # So it will be in pos=2 @ \begin{abstract} Normally in R, objects live -- and die -- in memory unless you explicitly save them with \code{save}, or save the entire image with \code{save.image}. The \code{g.data} package allows you to save a whole group of objects to an associated directory on disk, then access them later. The objects then appear to exist in a particular location on the search path (position 2 by default), and are readily accessible without extra effort, but R does not actually load them into memory until needed. \end{abstract} \section{Introduction} In this example, I create two large matrices \code{m1} and \code{m2}, and store them on disk in a ``delayed data package'' (ddp). Normally you'd choose the ddp location, but here it's just a temporary directory. The \code{g.data.attach} command attaches an environment associated with the ddp directory: <<>>= require(g.data) (ddp <- tempfile("newdir")) # Where to put the files g.data.attach(ddp) # Warns that this is a new directory search()[1:3] assign("m1", matrix(1, 5000, 1000), 2) assign("m2", matrix(2, 5000, 1000), 2) ls(2) @ The \code{g.data.save} command does the actual storing to disk. Once I detach the environment they lived in, R forgets the objects: <<>>= g.data.save() # Writes the files detach(2) @ In the same or another R session, I then attach the ddp, and the matrices appear to be instantly accessible. In fact they are just promises, so the first time I access \code{m1} (by asking its dimensionality) there is a delay as \code{m1} is actually loaded into memory. Further access to \code{m1} is quick, though, because now it's in memory. Note \code{m2} never needs to be loaded into memory, saving time and resources: <<>>= g.data.attach(ddp) # No warning, because directory exists ls(2) system.time(print(dim(m1))) # Takes time to load up system.time(print(dim(m1))) # Second time is faster! find("m1") # m1 still lives in pos=2, is now real @ I can also put a new object \code{m3} into the ddp and re-save it: <<>>= assign("m3", m1*10, 2) g.data.save() # Or just g.data.save(obj="m3") detach(2) @ \section{Variations} There is a function \code{g.data.get} to access a single object without attaching the ddp: <<>>= mym2 <- g.data.get("m2", ddp) # Get one object without attaching @ There is also a function \code{g.data.put} to write an object without attaching the ddp: <<>>= g.data.put("m4", matrix(1:12, 3,4), ddp) @ Since we're done with this example, you may want to remove the ddp now: <<>>= unlink(ddp, recursive=TRUE) # Clean up this example @ Here is a new example with a slightly different approach. We skip \code{g.data.attach} entirely, instead attaching a list \code{y} directly to position 2. \code{g.data.save} still works, but you must now tell it the location of the directory: <<>>= ddp <- tempfile("newdir") y <- list(m1=1:1000, m2=2:1001) attach(y) # Attach an existing list or dataframe search()[1:3] ls(2) g.data.save(ddp) detach(2) unlink(ddp, recursive=TRUE) # Clean up this example @ \section{Under the Hood} \code{g.data.save} simply stores one object per file in the ddp directory. An object \code{xyz} is stored in file \code{xyz.RData}. You could access these files with ordinary \code{load} commands, and you could write (or overwrite) them with \code{save} commands. Unfortunately, in Windows the files \code{x.RData} and \code{X.RData} are indistinguishable, so we modify the naming convention by preceding uppercase letters with the @ symbol. An object \code{aBcD} is stored in file \code{a@Bc@D.RData}. \code{g.data.attach} contains the magic. The environment it attaches contains only promises, implemented with \code{delayedAssign}. When you first access an object, R fulfills the promise to 1) load the data file, 2) store the real object in the environment, and 3) return its value to you. Subsequent access just returns the real object which is now stored in the environment. \code{g.data.attach} also gives the environment a ``path'' attribute, so \code{g.data.save} will know where to write files. \code{g.data.save} is smart enough to only write back to disk objects that are not promises. It also has options to allow you to choose the objects written, remove objects, and set the directory to write to. \newpage \appendix \section{Function Index} \begin{itemize} \item {\large\bf Create and Maintain Delayed-Data Packages} \begin{description} \item[g.data.attach:] Attach a delayed-data package (DDP) \item[g.data.save:] Write a DDP to disk \item[g.data.get:] Get one object from a DDP on disk \item[g.data.put:] Write one object to a DDP on disk \end{description} \end{itemize} \end{document} g.data/ChangeLog0000644000176000001440000000111612100606166013207 0ustar ripleyusersNew in version 2.3: - Environment now attached as "myddp" instead of "package:myddp", making searchpaths() useless New in version 2.2: - Vignette New in version 2.1: - g.data.upgrade() removed - NAMESPACE added, making g.data.mash() and g.data.unmash() internal - Code split into individual files New in version 2.0: - All data files stored in top-level directory, eliminate the "R" and "data" subdirectories. - Filenames include an "@" before uppercase letters, needed for Windows. - g.data.save() knows not to re-write promises. - Upgrade from v1, with a backwards-compatibility mode g.data/NAMESPACE0000644000176000001440000000012012044275212012647 0ustar ripleyusersexport(g.data.attach, g.data.get, g.data.put, g.data.save) g.data/DESCRIPTION0000644000176000001440000000117712100701770013147 0ustar ripleyusersPackage: g.data Version: 2.3 Date: 2013-01-25 Title: Delayed-Data Packages Author: David Brahm Maintainer: David Brahm Description: Create and maintain delayed-data packages (ddp's). Data stored in a ddp are available on demand, but do not take up memory until requested. You attach a ddp with g.data.attach(), then read from it and assign to it in a manner similar to S-PLUS, except that you must run g.data.save() to actually commit to disk. License: GPL Packaged: 2013-01-25 22:54:57 UTC; a215020 Repository: CRAN Date/Publication: 2013-01-26 08:21:28 g.data/man/0000755000176000001440000000000012044275212012212 5ustar ripleyusersg.data/man/g.data.save.Rd0000644000176000001440000000720112100606274014573 0ustar ripleyusers\name{g.data.save} \alias{g.data.attach} \alias{g.data.save} \alias{g.data.get} \alias{g.data.put} \title{ Create and Maintain Delayed-Data Packages } \description{ g.data.save reads the data in search position "pos", and writes them as a delayed-data package ("DDP") to "dir". Data objects are initially created as promise objects, the promise being to load the data and return it the first time the item is requested. g.data.attach attaches such a package, in position 2 by default. } \usage{ g.data.attach(dir, pos=2, warn=TRUE, readonly=FALSE) g.data.save(dir=attr(env, "path"), obj=ls(env, all.names=TRUE), pos=2, rm.obj=NULL) g.data.get(item, dir) g.data.put(item, value, dir) } \arguments{ \item{dir}{Directory (full pathname) of DDP.} \item{pos}{Search path position.} \item{warn}{Logical: warn user if directory being attached doesn't exist} \item{readonly}{Logical: set an attribute on the package that will cause \code{g.data.save} to abort.} \item{obj}{Object name(s).} \item{rm.obj}{Objects to remove, both in memory and on disk.} \item{item}{Item to retrieve from an unattached package.} \item{value}{Value for the data item being put with \code{g.data.put}.} } \details{ Data stored in a delayed-data package (DDP) are available on demand, but do not take up memory until requested. You attach a DDP with \code{g.data.attach}, then read from it and assign to it via its position on the search path (similar to S-Plus). Unlike S-Plus, you must run g.data.save() to actually commit to disk. You can create a DDP from any position in the search path, not just one created with \code{g.data.attach}; e.g. you can attach a list or dataframe, and its components will become objects in the DDP. In this case, the call to \code{g.data.save(dir)} must specify the path where files will be saved. If the DDP was created with \code{g.data.attach}, then its directory is known and does not need to be passed again to \code{g.data.save}. The filename associated with an object `obj' is `obj.RData', except that uppercase letters are preceded by an `@' symbol. This is required by Windows since `x.RData' and `X.RData' are the same file under that OS. Unexported functions \code{g.data.mash} and \code{g.data.unmash} perform the object name / filename conversion, e.g. g.data.mash(dir, "aBcD") returns "dir/a@Bc@D.RData". g.data.get can be used to get a single piece of data from a package, without attaching the package. g.data.put puts a single item into an unattached package. } \value{ g.data.get returns the requested data. } \seealso{\code{\link{delayedAssign}}} \examples{ \dontrun{ ddp <- tempfile("newdir") # Where to put the files g.data.attach(ddp) # Warns that this is a new directory assign("m1", matrix(1, 5000, 1000), 2) assign("m2", matrix(2, 5000, 1000), 2) g.data.save() # Writes the files detach(2) g.data.attach(ddp) # No warning, because directory exists ls(2) system.time(print(dim(m1))) # Takes time to load up system.time(print(dim(m1))) # Second time is faster! find("m1") # m1 still lives in pos=2, is now real assign("m3", m1*10, 2) g.data.save() # Or just g.data.save(obj="m3") detach(2) mym2 <- g.data.get("m2", ddp) # Get one objects without attaching unlink(ddp, recursive=TRUE) # Clean up this example } \dontrun{ ddp <- tempfile("newdir") # New example y <- list(m1=1:1000, m2=2:1001) attach(y) # Attach an existing list or dataframe g.data.save(ddp) detach(2) unlink(ddp, recursive=TRUE) # Clean up this example } } \keyword{data} g.data/R/0000755000176000001440000000000012044275212011640 5ustar ripleyusersg.data/R/g.data.get.R0000644000176000001440000000015412044275212013677 0ustar ripleyusers## Get data from an unattached package: g.data.get <- function(item, dir) get(load(g.data.mash(dir, item))) g.data/R/g.data.save.R0000644000176000001440000000122012044275212014051 0ustar ripleyusers## Save objects in position "pos" to a delayed-data package: g.data.save <- function(dir=attr(env, "path"), obj=ls(env, all.names=TRUE), pos=2, rm.obj=NULL) { if (is.character(pos)) pos <- match(pos, search()) if (is.na(pos)) stop("pos not found") env <- pos.to.env(pos) if (isTRUE(attr(env, "readonly"))) stop("Read-Only!") if (!file.exists(dir)) dir.create(dir) if (length(rm.obj)) {rm(list=rm.obj, pos=pos); file.remove(g.data.mash(dir, rm.obj))} is.promise <- function(i) is.call(eval(parse(text=paste("substitute(", i, ", env)")))) for (i in obj) if (!is.promise(i)) save(list=i, file=g.data.mash(dir, i), envir=env) } g.data/R/g.data.unmash.R0000644000176000001440000000012012044275212014404 0ustar ripleyusersg.data.unmash <- function(fn) gsub("@", "", sub("\\.RData$", "", basename(fn))) g.data/R/g.data.put.R0000644000176000001440000000023612044275212013731 0ustar ripleyusers## Put data into an unattached package: g.data.put <- function(item, value, dir) { assign(item, value) save(list=item, file=g.data.mash(dir, item)) } g.data/R/g.data.mash.R0000644000176000001440000000032012044275212014043 0ustar ripleyusers## Convert object name <-> filename, e.g. aBcD <-> dir/a@Bc@D.RData ("@" needed for Windows): g.data.mash <- function(dir, obj) file.path(dir, paste(gsub("([[:upper:]])", "@\\1", obj), "RData", sep=".")) g.data/R/g.data.attach.R0000644000176000001440000000077612100606230014365 0ustar ripleyusers## Attach (or virtually create) a delayed-data package ("DDP"): g.data.attach <- function(dir, pos=2, warn=TRUE, readonly=FALSE) { env <- attach(NULL, pos, basename(dir)) attr(env, "path") <- dir attr(env, "readonly") <- readonly if (!file.exists(dir)) {if (warn) warning("New DDP: ", dir); return(invisible())} for (fn in dir(dir, pattern="\\.RData$", all.files=TRUE, full.names=TRUE)) eval(substitute(delayedAssign(OB, get(load(FN))), list(OB=g.data.unmash(fn), FN=fn)), env) }