From 6064dbc242fc30fa75775c6b9c20928f8a075e24 Mon Sep 17 00:00:00 2001 From: Joe Thorley Date: Mon, 1 Apr 2024 07:32:12 -0700 Subject: [PATCH 1/3] fix previous merge conflict in freshwater fish --- R/sysdata.rda | Bin 4853 -> 4854 bytes data-raw/freshwaterfish/freshwaterfish.csv | 165 +-------------------- data/ab.rda | Bin 2097 -> 2107 bytes data/cdc.rda | Bin 21796 -> 21743 bytes data/freshwaterfish.rda | Bin 4378 -> 4382 bytes 5 files changed, 1 insertion(+), 164 deletions(-) diff --git a/R/sysdata.rda b/R/sysdata.rda index 34e16136ecc2aa53e855d94d868ac5d1f2be6b78..33756a02cb890af0f6d03e093f6c59bdb7b8192a 100644 GIT binary patch literal 4854 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 aq)sjXFfPGV=%4g1OtFlq?=0*G;Qs)~sGBta literal 4853 zcmZ{mc{~%2!^bzX*=F-KMo2X?_cb#&wT&_NIU?jXLda3+m}|L`IddO5=E!a2$`K_; za^xsNhmxe|Qr~aS_j!KL>-q2b{QLfVKCjQ8ABrnOSDox4>)>LFKz{~EjQ{!l=l{_l z003MU{$t>JC$?={QqQ_L?n@juw*ij2o?|EU(7&CAjM$G3Km8fwqO^=`>(Nq%&r zPJL>1G+oYnBVm)VJiP-^-|m!041poNcX#Q`aqI zNv~s#nB9Z4>Q?V-%gcWYe!Xq#K`7uc85D5Jyg=k1Yp)n$%3(=wd=uYjcp6d@b(TSO zUV6&7ErRvhxIi6FkINTE+EvgSi{eC$zbII2Zy{k=m;|w#2q`{zaQy3Z3hPF4N~*4C z8?OL?*aECHQ#C_9-Lg56$kq%;cI`SlQTS)YLb% zRONOqd=pi$TXtEI9e+$r|3~VeAke{IZfg3;jBTx{g^h!=i_^f^^s|-z(W2gom>);N zK8H7ZK4fQ~^f+nl5qd47v}s^^ZTH}xmri=g9qou8Fbs@5RPUXQ*c;Q~94$>@U|7{#z&-cx*UNmRyhe@%4D_Gf6tL&6~9h6h1KVte0! zMI?~YwNJ7x-{j6GT81(n@!9lb?)iK?6)|EU)`E=aH2J>%K0xi39-=3rjc@AldUWdX z_8P;f?U;xYkgUR2P%BXV`w7~!U+=987Nr|2dyZFwkPf1`8}9<;73-4lwQ17_%P{WJ zs#l9xUFy!>;(K6aTC^euhbpn~t2mhGc@uB;zjyf6+tB<;O zK9Qnq>Q}tEROtEJC8OHDch<36j4n=9l`IR}l%51C9-6{m6-!b%6}bh4k6!$Ii9kho z+Id)t$`M7h49*|XSw!si08hBJU4qbZ8v8^iq^nPWp9U>U&_!+&2ydR$b4@h7!k3=I zX@Je?aQ;1iR7UMCmq__{>_J8aA zQgL9_el7Yud&LGs@A+}O)Y;|DJVV6>iG@1j0#`#5mr=bM&_ zA$y)Gkc9xaE+hPDOAgn*%2VjZsMJ_746SYFi zp)t|6BH#IdN#01ykgaTjL!e5$hP7bZE92p?`8$inUtUZwjn3$ss>Q~fIv%gwyEK~UJdDcxvbYs;Un+f@qpD%LPcB;zS?4W;gHMv{Wyg4ux4&h&(PyhDNi#w28B?XHg?S7rhP7_qmY3uqO4bLf@;9zaO*)I%^~Dnke> zerMM8AkTVfu=_9?MMAS4o;Bh;El+{JUcI8yLRGUeZ)fvxv}&JwwyFM@Jla|)?p^wm zsuEhqi!XQE8+OsGm|1Kb=L^n{ZSQ;c?UsT@-At>@TE|L{WcNL(Qjm;vS7G5A76U5G znzIip!pHHYqxX5A?F;|Rqn^p#Y0gw&RMF3MMOr5b2%JQ|Dwx~b?~WN)@|yf01;^p# zZwsHje6C%JtYk^?%)wHd*lPpG_puk_Me-BoH0F#HU*S$qrP;r8luyOJJX1?HS*YE= zB^GTieC7j)L*dlpAcP~gj=g=<_v4g7;PSUlk16Rb(}n{x5G1365#7NwbycU=zLTE< zJ14pFpzt$(7Ymgxml80Ohkxm;R`4JkExa9oCECF_-@(0t$wJZ5IZcis@K#=~R-(}>09$Ozs-qTDXIWO%mlP*x*KdrIP}tem&%H`7 zu@K0Ku0v%A#6Sq@y!!Gd>1Nw;tr__H-(}f~67$$I*_wJH=BZI8PBdyf|9N}l01q1t ztM)Ta)up~lJ>~Jv`>)wciO0!mDzEw$;GHcmX2gA~M?5luY?l!HU?8tZb0a2BLb-mA z$}jW04Ufb*XaKYmB|2R*UERh-mJ?lg4rcr_fL>8w>IYwoWi9YrT&)ROK777e50quft}#pV0tN;9S9oq{~XLz>)gBo&SeQ4h` ztX|7gus{mM;!!vkfseg6vNXG5EvNDB8N6wcd1#;QL6-P*tMbBVUGFXWW%E`KF}Q+M z@~#G&EGmZfM=K5k64G7v)LXthf4goEo2;k8lQZ(bCC;#X6)VGOe{yx$dK!ICF=ZUb zOrw=YS;$X2-c(S{)u~p6T&{Htu)BCD3hfuqfEH0wECi2!f@9`wYDO7n1r*_dc4Mb0 zr?qzQs#N?g3v(JlW5R$|!Snu^n-l1jWVS}X?ffgBt-c0G*CW;Z5YwQ>X3Npxjm)^H z7eAb1#3vAUb~eHOAB+r(MmX1|;0IMT=l;ED2f>@o zq=jf})-{HhG|u&#&P|6r-@`T1&X2{Qimaopm2P9HeZPn4Ez4a@kW&YFz*=#KFE`OA z$P{B#8m6B$1$zayec66(NoULuT0)?S=n=g*SFURDEC?i}mVYmLbrW4~$};x4VcWpE$&QT_^D0vqH69SGu}HXN`?rlNDTc&2*} zI_1H+)VTNC`8cv?V$j$yhaEDL!rK@~uHn;cY|+Sq$!bZ}!BKbVfo9Y%`Ie+EGZPE8 ziG_F|)N+m(5VV}+J1KBK=Y^@9eR2j<@EStb7R3^O`z+eZY&$QUjRmUn!l=ITPKmkR z>nJRt4Fj(CVeuPU%LJb8mBE?4sH8Mj^u5@OhNQPw(u3Nb)wJ|T;sz%&oIKsMNePUj zVh`8DO*8d7qI@dbIY`Mg#Terh6Uh?ys}`!M`Y8+@zeKsIoJi9uzgQ(!xZt&dRmwLT zq_n-z%Hqig)6>9vo4n*>LDah!TU)hm+LRrC z0Jqi2vm}@i{e=nk#yaBI8)3$JdSnrX*}e%@r|Zj&^D<;E+UB8KPHIybB2nbnfvWi< z4~s-Xw`}4O^E%7Koow5*iT<{Ih2#=jl9|#HMvLv+;=fHP2(;Bs_39eWlr-3N7veDv zKXtW!pIY@uFs+m#W$EpC#KnwerM-ctTqzhUx~C@L{3e-vl5oJAtfU>0)n(nuA8@S= z{6k>Hmk`K&@L5xm^>A{a95Z=rP1~SR9~+^&Vm%eiuJLp0|ZsQCi;X^qce_| zL3GwmUO#n=<=;xR@O;00Ux9nZ|?a5iS^|}W? zo=}^dC=thinSdiEYgTHY1i|+~+#R13`MNkQ-=IDa)GhOLjCsRkF@>J^T6j7CXw5qe zKUDViZs2)o_;~ug7PP<)u)3kG(UOA|d-_H-(hZ{Rct)Bu_ux|Sdsk2Qn~V8%<%tL( zjw#ehUi4rHr62pW%HrNIKn==9hu?O~9+jY%cM0B^u`6xGS_H_06h;$G^%6w$aC{yD zgG_tb0%7}f)Oo0GaX9X|5lK%ugj}PbSOSw&_=yBtl)9#6afxheIYM}A#Mj7dccZGI zAxztfamVP(Ze%x0B5+t4WE8Bs2W((j%20we`V#Z_8w(=dE=vfa7#K&o{piyT-049V zs|AXBp;Ql6!m1tU5|5in0IOS{>j3G5p)vS)HC#Q-geU}0>`v0Lnk@=OCH{X-0I@Q&a!rB9o=vN#-Dgk?X_;z@@hdz+S!O(E UJ9y0000zKmY(5Xn>k&s3)e0qytQVGyni-&;S5&lO~M;qfACdh9QA8 zX@7_@8Vn!+!6HJNLTOFuCeu-xnmtCE00006O#lEuU3MEdk}A>wKFkm^$1cp$NfcaP z-{t~1nsxa>sE8mHs1|*{9@zWzc6NK74eaUmxmT;y!C@)ucDMwOBw2$j(M?;`?7kpD znjO<+Teh#GBSK_HziQd4_K4jT$!&9-l7HXZw5Z!gx=I$BKC7NLC7#ahnCdE!e7IwS z=oT|(ggr2A*Ih+ezjmwvl(i_rR}-O4cFEV5)nR27d>L6z6>Nxcyo(s*w3?(t)H*5^ z%TknigeQ5SQ6y7Tm5sW32)kfrsDLK~1OQY(NMVcwnv*~Pk9!vjKnjf{EG{dCn16;N z7F#*UfrhGXS)Pb1qO^(hi7o90S|?Wl!?AYQ6&ouMT1^A2vy_MC6bi*u0rLB-PK;V1 z!bVhOVUn=<3^YN;7^A%SToQ#at&Q+vYUq~BXSvL^Ey2`XNadPjf8X8%*igJMonTL^ za^M+c&}PadwN~ch$X$ZMFMBQHz<)@cd%`1EOyNwEE{XFb>Jv+~7cI2Y zT|r|51%kDeMxiKCrez>F3SrJ$4+73UG;C*}lQ+w9>@O_oy{fKP`MBljo_~y6Y;B7; zW{8LgxWAxP2OcXvHTDheMz)}r)N5-Ed^KUibmbGvZHDs%+7N8~@6k%eOvxMy5`_;! z#9fSJs!-0~OTHXXK-csyCUQLKc$!(%m09B8Rz9Iw4KE02ExTqc)imNUsv+V6MjJE& zaBdVwA-)EZoG`dBnGAE;%YT(8=hD=K37dpy84*ujFmxsZNW&1ptWw zJWlcoMw`SKqzo0VE&+cL0M_1xF0*fL4IfM85VXG#V~<#_kt?#Lr!t_?S1e#*g(MN; z`4u1#;v)bk8U$WdzL(mY={4xHRwh?h=(hdbK18UV!V zx|}fHz;n&jvn zIt6raTq>EJoT8i_&U2wgQY%#;i=dN)}I3 zV-ZD0!A5!Z4mTR(pnt9#Tqa~Syq$0eQ?9W!3CrvQYdl{!Jl`CRLi6nc8rGJuqSk%J`5&{W8p@<83 zbC|GJBIQGiNQ;)!91+KU61G=W1GGYQYpl*&%^FLn6qG?pc{6xoql8G9|fcHSs>n#LShY%*Zoga&mPap$P>bBvC|!)k`u0 zO1put--{StWq(k#h<2dc-L|w;A=HpIqmsxhAc~07Qpnn9VAnZNh^*bmcMp|?5XXH; zP?MD5b5les&YCstXHf-uMb4S^&t846mgY$HLUfV}1jG$GP*qK!G=GL9!DG3K14&zI!YUCcGD)C0 z1r(BBsdhl#5wk>PG_^oxQ3@eMLNy3TnLf&cmMG+&{v(&qG~ZSkcekFMd$lD;M8@|p z%*6ymlK|jGqN>#2Zw+c;t-mIT4eTd4KK;$hIPN*zW0u-sJ0%V_YSF9&G1)nr2E-PC z9%KSlVt?I3tyH!2ZJ7j6qgmbZ7dvxY=bij;Mw;9#YFJ?MvzNPK3AZJ>RL!jzSkFfABa3@$Sx0hp!07>J(4G%a^$c%)8b#79wt1C>QuDV}xT&0uC^+f{0< zC}CN_6qP9yoHz)1ScqdBp36u*P#mZtsxVMjuz%B@yc@}fv8L{B9r@$cuRK?uW3bx| z-fc)cIxRtyl50NpPftHPVg|)qXAO6?@7o?|(KEu!^PJ{VRle)yp6Z9C8dR4q6jdnFN-Xvv#jR$;+RMS~MfR!>YiK0>j|Qs!n5q$aU^L1_?} z(0@p$f*}gmE#){I9gP=(c^KPZNkTrExIOPg7>R6|Mx}FI$!x2nE)goJg*T5>*nsGL zB99bdh&{O;b(@bu+SnCDt$t0FtPJmA0xPnmkge`lk^yB(? z{5{zo^WsDL?up^6K;%sLTQPKqeLWmMjDMV27mwn4FCXW1ki;& zBO+onG}9me00E!?01QM31QXLm4K#X~hJl~~pa1{>ILVVnfYGKSBSR3tnl!{1jRp_^ zV1JQ8PbBn1B*ZdhJt?Q8X_Fug4FKAJ00;(r_-n+8R*(VvFhI{le9}oIO?Usl<^ns} zan!_-5Fi95RGA7X_ILI>T^hA^tOV-Q)}ua-lmlajQ*OXW@oV+vcBZa693#e3V%52*ik~)SJiaJwKUz`whqF{2fYe;J;G9| zu^xzB#4fxoEotD$M=-E6reFul?$cT^d58(4R27C+ zhseW39A}{&=Xt>>QwrKKgA%TZeS6xqTcRqRO0glzoew@g+J?f8fRc0pABMir_p}+N zltj7In$ayfl&KiDj&`7EJe&YfI)BE%E}d%&Iih=LIU1QGX{Z#TfQT50fZ-8)RzPT< z7``T^BHXTp!`qm*$C{`>mjr(W?-{c zx~SU}g&c`00m&&2bl*J7Nch#XPN1ea;;VBX93#EEMD}uf-^~qK(nutM(0>K&%)m8b z&Vph!-$S*dV8z^-o(eeyiI`c*B1a@HYzJ~}IL(EG5XZ8qq;;nfk_HzA^F}H5LKial zeO_sI@XUj++I;xaJIfM^x2b)bGk7+_z|u6pDHJZ2{%hAoav;|+0TFrzRiK<3g%QGU znWZKeU>Hda8gAveN8+vP2!9h}cxo9UpEFs}oID2b&{Lmq?Y`<$Row!hMF5=#i3TH1 zkc!ws19Q&c!;paIV55Ik*gGc=rWedJ95VcsY2ISli6ebbmn51}9b9aKmdc z#BZS}bQ4@GOc2;}HT~MashzLDW!rbptlrK8a2sqO#@kaHrex$oQd(rZQA%!MUA`>h zsiD)Tsc<-ivp6ulkZH7eI;A53K<$w(x?2tnv_;Y}Nm0(Y6=IGBVrAy2T072J3|OZ{ zgJ#acPDsq^WH=rugnw^9zCb9^tr&r5#es8#bP)O7jFK6`1qE~k2Il@4a8T!0V9cXi zp&5X=UO=r3G%Cg33Mqp*#MmV%BG9ed6_OC?ZW7T| zo7+rE5w|G{rbI$P098@MZob(b2XP~(iK4Gl5nF0|h2j)W4f~Zsfxt%nq9yDKg0N*Q zA&^ww`X^mCwswA8E4}c)R$5?WLtt**0(pADRBTZxcYjQRs#UbF(IG1t8i-j27Es%% zwnS;AXHo^ivJ#1r zka#G;V_1;8YgmEK!$XDRjb-l;!-d*5PlYKY9M@x(s%gK=9vb)}Kamvy{%Yw$vj)q^wk&M2{7 zc}*s2TQyn?jx|grB~ApAC%FwvZJESYCP|2n!#D>^3p7_u+jnB%%*f2jQKBV~6oUqf z#w{2!U>RD041x*Plt_voD990+AQ%R;3-@4pe19+aBxUh(?z+B=7gl;Psrea~4Wvvw z`63o6)_f4Q9o^BW9gXE+>*$Q<%Dx)ko?(wi8x5!)nO7)XS&IyFK>b`%!GbPzN>vDF zEb5lXHBdXOK(o0hk!jT{_VpkKMmfQ`0*W+st&~;kfeYe8N~vdz`}4zS$~iuwp2yWLx|@eMG*##-yT+6_Z_$Z=pK|@oys^v9By}7(%5!nXmD*%kQOLT&;nM*0|>=cEQ Vj3XcWNHBl#cO+AV2?4_^m@s)VwUqz> diff --git a/data/cdc.rda b/data/cdc.rda index 9d3ffa5b983c5045bdddd540ba2b11447c4e5118..6879fdafd72f231b0f4d1714ca0d75e23b72f033 100644 GIT binary patch literal 21743 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 WiUJ;>h@c_=#oUoj6eJN%D(Zk4C{Jww literal 21796 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 YxrmzTD5)1z6?sM6kxmpOKAyBpfNqj7ssI20 literal 4378 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 Date: Mon, 1 Apr 2024 08:34:03 -0700 Subject: [PATCH 2/3] snap shot data frames --- DESCRIPTION | 1 + data-raw/data-raw.R | 8 + tests/testthat.R | 1 + tests/testthat/_snaps/ab.md | 181 +++++++ tests/testthat/_snaps/cdc.md | 619 ++++++++++++++++++++++++ tests/testthat/_snaps/freshwaterfish.md | 496 +++++++++++++++++++ tests/testthat/test-ab.R | 7 +- tests/testthat/test-cdc.R | 7 +- tests/testthat/test-freshwaterfish.R | 29 +- 9 files changed, 1326 insertions(+), 23 deletions(-) create mode 100644 tests/testthat/_snaps/ab.md create mode 100644 tests/testthat/_snaps/cdc.md create mode 100644 tests/testthat/_snaps/freshwaterfish.md diff --git a/DESCRIPTION b/DESCRIPTION index c0aa569..838faaa 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -50,6 +50,7 @@ Depends: Suggests: chk, testthat (>= 3.0.0), + tibble, covr Encoding: UTF-8 Language: en-US diff --git a/data-raw/data-raw.R b/data-raw/data-raw.R index 174c1c3..b2e1b10 100644 --- a/data-raw/data-raw.R +++ b/data-raw/data-raw.R @@ -16,6 +16,14 @@ whse_fish_species_cd$SPECIES_ID <- as.integer(whse_fish_species_cd$SPECIES_ID) # remove marked utf-8 character cdc$`COSEWIC Comments` <- gsub("†", "", cdc$`COSEWIC Comments`) +chk::check_key(freshwaterfish, "Code") +chk::check_key(cdc, "Species Code") +chk::check_key(ab, "Species Code") +chk::check_key(whse_fish_species_cd, "CODE") + +chk::chk_join(freshwaterfish[!is.na(freshwaterfish$ABCode),], ab, by = c("ABCode" = "Species Code")) +chk::chk_join(freshwaterfish[!is.na(freshwaterfish$CDCode),], cdc, by = c("CDCode" = "Species Code")) + usethis::use_data(cdc, overwrite = TRUE) usethis::use_data(freshwaterfish, overwrite = TRUE) usethis::use_data(whse_fish_species_cd, overwrite = TRUE, internal = TRUE) diff --git a/tests/testthat.R b/tests/testthat.R index 039250c..a8d8aa7 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,4 +1,5 @@ library(testthat) library(fishbc) +library(tibble) test_check("fishbc") diff --git a/tests/testthat/_snaps/ab.md b/tests/testthat/_snaps/ab.md new file mode 100644 index 0000000..f9473bc --- /dev/null +++ b/tests/testthat/_snaps/ab.md @@ -0,0 +1,181 @@ +# ab + + Code + print(ab, width = 200, n = 200) + Output + # A tibble: 85 x 3 + `Species Common Name` + + 1 AFRICAN JEWELFISH + 2 ARCTIC CHAR + 3 ARCTIC GRAYLING + 4 ARCTIC GRAYLING (BELLY POPLN) + 5 ARCTIC LAMPREY + 6 ATHABASCA RAINBOW TROUT + 7 BRASSY MINNOW + 8 BROOK STICKLEBACK + 9 BROOK TROUT + 10 BROWN TROUT + 11 BULL TROUT + 12 BULL TROUT X BROOK TROUT HYBRID + 13 BURBOT + 14 CICHLID + 15 COHO SALMON + 16 CRUCIAN CARP + 17 CUTTHROAT TROUT + 18 CUTTHROAT TROUT X RAINBOW TROUT + 19 DEEPWATER SCULPIN + 20 DOLLY VARDEN + 21 EMERALD SHINER + 22 FATHEAD MINNOW + 23 FINESCALE DACE + 24 FLATHEAD CHUB + 25 GOLDEN TROUT + 26 GOLDEYE + 27 GOLDFISH + 28 GRASS CARP + 29 IOWA DARTER + 30 KOKANEE + 31 KOI + 32 LAKE CHUB + 33 LAKE STURGEON + 34 LAKE TROUT + 35 LAKE WHITEFISH + 36 LARGESCALE SUCKER + 37 LOGPERCH + 38 LONGNOSE DACE + 39 LONGNOSE SUCKER + 40 minnow family + 41 MOONEYE + 42 MOUNTAIN SUCKER + 43 MOUNTAIN WHITEFISH + 44 NINESPINE STICKLEBACK + 45 NORTHERN CRAYFISH + 46 NORTHERN PIKE + 47 NORTHERN PIKEMINNOW + 48 NORTHERN REDBELLY DACE + 49 NORTHERN REDBELLY DACE X FINESCALE DACE + 50 PEAMOUTH CHUB + 51 PEARL DACE + 52 PRICKLY SCULPIN + 53 PRUSSIAN CARP + 54 PYGMY WHITEFISH + 55 QUILLBACK + 56 RAINBOW TROUT + 57 REDSIDE SHINER + 58 RIVER SHINER + 59 ROCKY MOUNTAIN SCULPIN + 60 ROSY RED MINNOW + 61 ROUND WHITEFISH + 62 SAILFIN MOLLY + 63 SAUGER + 64 SEA LAMPREY + 65 SHORTHEAD REDHORSE + 66 SHORTJAW CISCO + 67 SILVER REDHORSE + 68 SLIMY SCULPIN + 69 SMALLMOUTH BASS + 70 SPLAKE + 71 SPOONHEAD SCULPIN + 72 SPOTTAIL SHINER + 73 STONECAT + 74 sucker family + 75 THREESPINE STICKLEBACK + 76 TIGER TROUT + 77 TROUT-PERCH + 78 TULLIBEE (CISCO) + 79 TULLIBEE (CISCO) X LAKE WHITEFISH + 80 WALLEYE + 81 WESTERN MOSQUITOFISH + 82 WESTERN SILVERY MINNOW + 83 WESTSLOPE CUTTHROAT TROUT + 84 WHITE SUCKER + 85 YELLOW PERCH + `Scientific Name` `Species Code` + + 1 HEMICHROMIS BIMACULATUS AFJW + 2 SALVELINUS ALPINUS ARCH + 3 THYMALLUS ARCTICUS ARGR + 4 THYMALLUS ARCTICUS MONTANUS AGMN + 5 LAMPETRA JAPONICA ARLM + 6 ONCORHYNCHUS MYKISS ARTR + 7 HYBOGNATHUS HANKINSONI BRMN + 8 CULAEA INCONSTANS BRST + 9 SALVELINUS FONTINALIS BKTR + 10 SALMO TRUTTA BNTR + 11 SALVELINUS CONFLUENTUS BLTR + 12 SALVELINUS CONFLUENTUS X SALVELINUS FONTINALIS BLBK + 13 LOTA LOTA BURB + 14 PSEUDOTROPHEUS CCHL + 15 ONCORHYNCHUS KISUTCH CHSL + 16 CARASSIUS CARIASSIUS CRCA + 17 ONCORHYNCHUS CLARKI CTTR + 18 ONCORHYNCHUS CLARKI X ONCORHYNCHUS MYKISS CRTR + 19 MYOXOCEPHALUS THOMPSONI DPSC + 20 SALVELINUS MALMA DLVR + 21 NOTROPIS ATHERINOIDES EMSH + 22 PIMEPHALES PROMELAS FTMN + 23 PHOXINUS NEOGAEUS FNDC + 24 PLATYGOBIO GRACILIS FLCH + 25 ONCORHYNCHUS AQUABONITA GLTR + 26 HIODON ALOSOIDES GOLD + 27 CARASSIUS AURATUS GOFS + 28 CTENOPHARYNGODON IDELLA GSCA + 29 ETHEOSTOMA EXILE IWDR + 30 ONCORHYNCHUS NERKA KOKA + 31 CYPRINUS CARPIO HAEMATOPTERUS KOIF + 32 COUESIUS PLUMBEUS LKCH + 33 ACIPENSER FULVESCENS LKST + 34 SALVELINUS NAMAYCUSH LKTR + 35 COREGONUS CLUPEAFORMIS LKWH + 36 CATOSTOMUS MACROCHEILUS LRSC + 37 PERCINA CAPRODES LGPR + 38 RHINICHTHYS CATARACTAE LNDC + 39 CATOSTOMUS CATOSTOMUS LNSC + 40 CYPRINIDAE FAMCYPR + 41 HIODON TERGISUS MOON + 42 CATOSTOMUS PLATYRHYNCHUS MNSC + 43 PROSOPIUM WILLIAMSONI MNWH + 44 PUNGITIUS PUNGITIUS NNST + 45 ORCONECTES VIRILIS NOCY + 46 ESOX LUCIUS NRPK + 47 PTYCHOCHEILUS OREGONENSIS NRSQ + 48 PHOXINUS EOS NRDC + 49 PHOXINUS EOS X PHOXINUS NEOGAEUS NFDC + 50 MYLCHEILUS CAURINUS PMCH + 51 MARGARISCUS MARGARITA PRDC + 52 COTTUS ASPER PRSC + 53 CARASSIUS GIBELIO PRCR + 54 PROSOPIUM COULTERI PGWH + 55 CARPIODES CYPRINUS QUIL + 56 ONCORHYNCHUS MYKISS RNTR + 57 RICHARDSONIUS BALTEATUS RDSH + 58 NOTROPIS BLENNIUS RVSH + 59 COTTUS SPP RMSC + 60 PIMEPHALES PROMELAS RRMN + 61 PROSOPIUM CYLINDRACEUM RNWH + 62 POECILIA LATIPINNA SLML + 63 STIZOSTEDION CANADENSE SAUG + 64 PETROMYZON MARINUS SLMP + 65 MOXOSTOMA MACROLEPIDOTUM SHRD + 66 COREGONUS ZENITHICUS SHCS + 67 MOXOSTOMA ANISURUM SLRD + 68 COTTUS COGNATUS SLSC + 69 MICROPTERUS DOLOMIEU SMBS + 70 SALVELINUS NAMAYCUSH X SALVELINUS FONTINALIS SPLA + 71 COTTUS RICEI SPSC + 72 NOTROPIS HUDSONIUS SPSH + 73 NOTURUS FLAVUS STON + 74 CATOSTOMIDAE FAMCATO + 75 GASTEROSTEUS ACULEATUS THST + 76 S. TRUTTA X S. FONTINALIS TGTR + 77 PERCOPSIS OMISCOMAYCUS TRPR + 78 COREGONUS ARTEDI CISC + 79 COREGONUS ARTEDI X COREGONUS CLUPEAFORMIS TLWH + 80 SANDER VITREUS WALL + 81 GAMBUSIA AFFINIS WEMO + 82 HYBOGNATHUS ARGYRITIS WSMN + 83 ONCORHYNCHUS CLARKII LEWISI WSCT + 84 CATOSTOMUS COMMERSONI WHSC + 85 PERCA FLAVESCENS YLPR + diff --git a/tests/testthat/_snaps/cdc.md b/tests/testthat/_snaps/cdc.md new file mode 100644 index 0000000..3933708 --- /dev/null +++ b/tests/testthat/_snaps/cdc.md @@ -0,0 +1,619 @@ +# cdc + + Code + print(cdc, width = 200, n = 200) + Output + # A tibble: 550 x 45 + `Scientific Name` `Scientific Name Synonyms` + + 1 Acantholiparis caecus + 2 Acantholiparis opercularis + 3 Acipenser medirostris + 4 Acipenser transmontanus + 5 Acipenser transmontanus pop. 1 + 6 Acipenser transmontanus pop. 2 + 7 Acipenser transmontanus pop. 4 + 8 Acipenser transmontanus pop. 5 + 9 Acrocheilus alutaceus + 10 Agonopsis vulsa + 11 Albatrossia pectoralis + 12 Alepisaurus ferox + 13 Alepocephalus tenebrosus + 14 Allocyttus folletti + 15 Allolumpenus hypochromus + 16 Allosmerus elongatus + 17 Alopias vulpinus + 18 Alosa sapidissima + 19 Amblyraja badia + 20 Ameiurus melas + 21 Ameiurus nebulosus + 22 Ammodytes hexapterus + 23 Amphistichus rhodoterus + 24 Anarrhichthys ocellatus + 25 Anoplagonus inermis + 26 Anoplarchus insignis + 27 Anoplarchus purpurescens + 28 Anoplogaster cornuta + 29 Anoplopoma fimbria + 30 Anotopterus nikparini + 31 Antimora microlepis + 32 Aphanopus carbo + 33 Apodichthys flavidus + 34 Apodichthys fucorum + 35 Apristurus brunneus + 36 Aptocyclus ventricosus + 37 Arctozenus risso + 38 Argyropelecus sladeni + 39 Aristostomias scintillans + 40 Artedius fenestralis + 41 Artedius harringtoni + 42 Artedius lateralis + 43 Ascelichthys rhodorus + 44 Asemichthys taylori Radulinus taylori + 45 Atheresthes stomias + 46 Atherinops affinis + 47 Atractoscion nobilis + 48 Aulorhynchus flavidus + 49 Avocettina infans + 50 Balistes polylepis + 51 Barbourisia rufa + 52 Bathophilus flemingi + 53 Bathyagonus alascanus + 54 Bathyagonus infraspinatus + 55 Bathyagonus nigripinnis + 56 Bathyagonus pentacanthus + 57 Bathylagus pacificus + 58 Bathylychnops exilis + 59 Bathymaster caeruleofasciatus + 60 Bathymaster signatus + 61 Bathyraja abyssicola + 62 Bathyraja aleutica + 63 Bathyraja interrupta + 64 Bathyraja minispinosa + 65 Bathyraja parmifera + 66 Bathyraja trachura + 67 Benthalbella dentata + 68 Benthalbella linguidens + 69 Benthodesmus pacificus + 70 Benthodesmus tenuis + 71 Blepsias bilobus + 72 Blepsias cirrhosus + 73 Bothragonus swanii + 74 Bothrocara brunneum + 75 Bothrocara molle + 76 Bothrocara pusillum + 77 Brachyistius frenatus + 78 Brama japonica + 79 Brosmophycis marginata + 80 Bryozoichthys marjorius + 81 Carassius auratus + 82 Carcharodon carcharias + 83 Careproctus cypselurus + 84 Careproctus gilberti + 85 Careproctus melanurus + 86 Careproctus oregonensis + 87 Careproctus ovigerum + 88 Caristius macropus + 89 Catostomus catostomus + 90 Catostomus columbianus + 91 Catostomus commersonii + 92 Catostomus macrocheilus + 93 Catostomus platyrhynchus + 94 Catostomus sp. 4 + 95 Caulolatilus princeps + 96 Ceratias holboelli + 97 Ceratoscopelus townsendi + 98 Cetorhinus maximus + 99 Chaenophryne melanorhabdus + 100 Chauliodus macouni + 101 Chesnonia verrucosa + 102 Chirolophis decoratus + 103 Chirolophis nugator + 104 Chirolophis tarsodes + 105 Chitonotus pugetensis + 106 Chrosomus eos Phoxinus eos + 107 Chrosomus eos x Chrosomus neogaeus Phoxinus eos x Phoxinus neogaeus + 108 Chrosomus neogaeus Phoxinus neogaeus + 109 Citharichthys sordidus + 110 Citharichthys stigmaeus + 111 Clevelandia ios + 112 Clidoderma asperrimum + 113 Clinocottus acuticeps + 114 Clinocottus embryum + 115 Clinocottus globiceps + 116 Clupea pallasii + 117 Cololabis saira + 118 Coregonus artedi + 119 Coregonus autumnalis + 120 Coregonus clupeaformis + 121 Coregonus nasus + 122 Coregonus sardinella + 123 Coryphaenoides acrolepis + 124 Coryphaenoides armatus + 125 Coryphaenoides cinereus + 126 Coryphaenoides filifer + 127 Coryphaenoides leptolepis + 128 Coryphaenoides yaquinae + 129 Cottus aleuticus + 130 Cottus aleuticus pop. 1 Cottus aleuticus;Cottus sp. 2 + 131 Cottus asper + 132 Cottus cognatus + 133 Cottus confusus + 134 Cottus hubbsi Cottus bairdi hubbsi + 135 Cottus rhotheus + 136 Cottus ricei + 137 Cottus sp. 9 + 138 Couesius plumbeus + 139 Couesius plumbeus pop. 2 Couesius plumbeus pop. 1 + 140 Couesius plumbeus pop. 3 Couesius plumbeus pop. 1 + 141 Cryptacanthodes aleutensis + 142 Cryptacanthodes giganteus + 143 Culaea inconstans + 144 Cyclothone atraria + 145 Cyclothone pallida + 146 Cyclothone pseudopallida + 147 Cyclothone signata + 148 Cymatogaster aggregata + 149 Cyprinus carpio + 150 Danaphos oculatus + 151 Dasycottus setiger + 152 Derepodichthys alepidotus + 153 Diaphus theta + 154 Elassodiscus caudatus + 155 Embassichthys bathybius + 156 Embiotoca lateralis + 157 Engraulis mordax + 158 Enophrys bison + 159 Enophrys lucasi + 160 Entosphenus macrostomus Lampetra macrostoma + 161 Entosphenus tridentatus Lampetra tridentata + 162 Eopsetta jordani + 163 Eptatretus deani + 164 Eptatretus stoutii + 165 Erilepis zonifer + 166 Esox lucius + 167 Eumicrotremus orbis + 168 Gadus macrocephalus + 169 Galeorhinus galeus + 170 Gasterosteus aculeatus + 171 Gasterosteus aculeatus pop. 1 Gasterosteus aculeatus ssp. + 172 Gasterosteus aculeatus pop. 2 + 173 Gasterosteus aculeatus pop. 3 + 174 Gasterosteus sp. 1 + 175 Gasterosteus sp. 12 + 176 Gasterosteus sp. 13 + 177 Gasterosteus sp. 16 + 178 Gasterosteus sp. 17 + 179 Gasterosteus sp. 18 + 180 Gasterosteus sp. 19 + 181 Gasterosteus sp. 2 + 182 Gasterosteus sp. 3 + 183 Gasterosteus sp. 4 + 184 Gasterosteus sp. 5 + 185 Genyonemus lineatus + 186 Gibbonsia metzi + 187 Gibbonsia montereyensis + 188 Glyptocephalus zachirus Errex zachirus + 189 Gobiesox maeandricus + 190 Gymnocanthus galeatus + 191 Gyrinomimus sp. 1 + 192 Halargyreus johnsonii + 193 Hemilepidotus hemilepidotus + 194 Hemilepidotus spinosus + 195 Hemitripterus bolini + 196 Heterostichus rostratus + 197 Hexagrammos decagrammus + 198 Hexagrammos lagocephalus + 199 Hexagrammos octogrammus + 200 Hexagrammos stelleri + `English Name` English Name Synonym~1 `Species Code` `Element Code` + + 1 "Fanged Snailfish" F-ACCA AFC4G21020 + 2 "Spiny Snailfish" F-ACOP AFC4G21010 + 3 "Green Sturgeon" F-ACME AFCAA01030 + 4 "White Sturgeon" F-ACTR AFCAA01050 + 5 "White Sturgeon (Upper~ F-ACTR-01 AFCAA01051 + 6 "White Sturgeon (Upper~ F-ACTR-02 AFCAA01052 + 7 "White Sturgeon (Lower~ F-ACTR-04 AFCAA01054 + 8 "White Sturgeon (Upper~ F-ACTR-05 AFCAA01055 + 9 "Chiselmouth" F-ACAL AFCJB01010 + 10 "Northern Spearnose Po~ F-AGVU AFC4F02020 + 11 "Giant Grenadier" F-ALPE AFCMC05010 + 12 "Longnose Lancetfish" F-ALFE AFC8E01020 + 13 "California Slickhead" F-ALTE AFCHH02010 + 14 "Oxeye Oreo" F-ALFO AFC1D01010 + 15 "Y-prickleback" F-ALHY AFCSC04010 + 16 "Whitebait Smelt" F-ALEL AFCHB05010 + 17 "Thresher Shark" F-ALVU AFDDC01020 + 18 "American Shad" F-ALSA AFCFA01060 + 19 "Broad Skate" F-AMBA AFDFD01180 + 20 "Black Bullhead" F-AMME AFCKA06030 + 21 "Brown Bullhead" F-AMNE AFCKA06050 + 22 "Pacific Sand Lance" F-AMHE AFCS601030 + 23 "Redtail Surfperch" F-AMRH AFCQK03030 + 24 "Wolf-eel" F-ANOC AFCSD02010 + 25 "Smooth Alligatorfish" F-ANIN AFC4F05010 + 26 "Slender Cockscomb" F-ANIS AFCSC05010 + 27 "High Cockscomb" F-ANPU AFCSC05020 + 28 "Longhorn Fangtooth" F-ANCO AFCZD02010 + 29 "Sablefish" F-ANFI AFC4C01010 + 30 "North Pacific Daggert~ F-ANNI AFC8F01020 + 31 "Pacific Flatnose" F-ANMI AFCMH01020 + 32 "Black Scabbardfish" F-APCA AFCS211010 + 33 "Penpoint Gunnel" F-APFL AFCQR03020 + 34 "Rockweed Gunnel" F-APFU AFCQR03010 + 35 "Brown Cat Shark" F-APBR AFDDF01010 + 36 "Smooth Lumpsucker" F-APVE AFC4G08010 + 37 "White Barracudina" F-ARRI AFC8D02010 + 38 "Lowcrest Hatchetfish" F-ARSL AFC7C01020 + 39 "Shining Loosejaw" F-ARSC AFC7B04010 + 40 "Padded Sculpin" F-ARFE AFC4E23020 + 41 "Scalyhead Sculpin" F-ARHA AFC4E23030 + 42 "Smoothhead Sculpin" F-ARLA AFC4E23040 + 43 "Rosylip Sculpin" F-ASRH AFC4E24010 + 44 "Spinynose Sculpin" F-ASTA AFC4E25010 + 45 "Arrowtooth" F-ATST AFCTB19020 + 46 "Topsmelt" F-ATAF AFCND04010 + 47 "White Seabass" F-ATNO AFCQH10010 + 48 "Tube-snout" F-AUFL AFCPA05010 + 49 "Closespine Snipe Eel" F-AVIN AFCEJ02010 + 50 "Finescale Triggerfish" F-BAPO AFC3B03020 + 51 "Velvet Whalefish" F-BARU AFC9B02010 + 52 "Highfin Dragonfish" F-BAFL AFC7B05010 + 53 "Gray Starsnout" F-BAAL AFC4F06010 + 54 "Spinycheek Starsnout" F-BAIN AFC4F06020 + 55 "Blackfin Poacher" F-BANI AFC4F06030 + 56 "Bigeye Poacher" F-BAPE AFC4F06040 + 57 "Slender Blacksmelt" F-BAPA AFCHF02020 + 58 "Javelin Spookfish" F-BAEX AFCHG02010 + 59 "Alaskan Ronquil" F-BACA AFCRY01010 + 60 "Searcher" F-BASI AFCRY01020 + 61 "Abyssal Skate" F-BAAB AFDFD02080 + 62 "Aleutian Skate" F-BAAE AFDFD02010 + 63 "Sandpaper Skate" F-BAIT AFDFD02030 + 64 "Whitebrow Skate" F-BAMI AFDFD02140 + 65 "Alaska Skate" F-BAPR AFDFD02040 + 66 "Roughtail Skate" F-BATR AFDFD02060 + 67 "Northern Pearleye" F-BEDE AFC8G01010 + 68 "Longfin Pearleye" F-BELI AFC8G01020 + 69 "Frostfish" F-BEPA AFCS202020 + 70 "Javelinfish" F-BETE AFCS202040 + 71 "Crested Sculpin" F-BLBI AFC4E26010 + 72 "Silverspotted Sculpin" F-BLCI AFC4E26020 + 73 "Rockhead" F-BOSW AFC4F07010 + 74 "Twoline Eelpout" F-BOBR AFCS802020 + 75 "Soft Eelpout" F-BOMO AFCS802030 + 76 "Alaska Eelpout" F-BOPU AFCMG02010 + 77 "Kelp Perch" F-BRFR AFCQK04010 + 78 "Pacific Pomfret" F-BRJA AFCRH01040 + 79 "Red Brotula" F-BRMA AFCME01010 + 80 "Pearly Prickleback" F-BRMR AFCSC06020 + 81 "Goldfish" F-CAAU AFCJB04010 + 82 "White Shark" F-CACA AFDDE01010 + 83 "Falcate Snailfish" F-CACY AFC4G09150 + 84 "Longfin Snailfish" F-CAGI AFC4G09070 + 85 "Blacktail Snailfish" F-CAME AFC4G09020 + 86 "Smallfin Snailfish" F-CAOR AFC4G09120 + 87 "Abyssal Snailfish" F-CAOV AFC4G09130 + 88 "Manefish" F-CAMC AFCQ101010 + 89 "Longnose Sucker" F-CACT AFCJC02030 + 90 "Bridgelip Sucker" F-CACO AFCJC02050 + 91 "White Sucker" F-CACM AFCJC02060 + 92 "Largescale Sucker" F-CAMA AFCJC02130 + 93 "Mountain Sucker" F-CAPL AFCJC02160 + 94 "Salish Sucker" F-CASP-04 AFCJC02260 + 95 "Ocean Whitefish" F-CAPR AFCRE01050 + 96 "Deepsea Angler" F-CEHO AFCYE02010 + 97 "Dogtooth Lanternfish" F-CETO AFCVH01010 + 98 "Basking Shark" F-CEMA AFDDD01010 + 99 "Smooth Dreamer" F-CHME AFCYH01010 + 100 "Pacific Viperfish" F-CHMA AFC7B01010 + 101 "Warty Poacher" F-CHVE AFC4F09030 + 102 "Decorated Warbonnet" F-CHDE AFCSC08020 + 103 "Mosshead Warbonnet" F-CHNU AFCSC08030 + 104 "Matcheek Warbonnet" F-CHTA AFCSC08040 + 105 "Roughback Sculpin" F-CHPU AFC4E27010 + 106 "Northern Redbelly Dac~ F-CHEO AFCJB31020 + 107 "Northern Redbelly Dac~ F-CHEOxCHNE AFCJB31X10 + 108 "Finescale Dace" F-CHNE AFCJB31040 + 109 "Pacific Sanddab" F-CISO AFCTA01080 + 110 "Speckled Sanddab" F-CIST AFCTA01090 + 111 "Arrow Goby" F-CLIO AFCQN03010 + 112 "Roughscale Sole" F-CLAS AFCTB23010 + 113 "Sharpnose Sculpin" F-CLAC AFC4E01010 + 114 "Calico Sculpin" F-CLEM AFC4E01030 + 115 "Mosshead Sculpin" F-CLGL AFC4E01040 + 116 "Pacific Herring" F-CLPA AFCFA07030 + 117 "Pacific Saury" F-COSA AFCNF01010 + 118 "Cisco" F-COAR AFCHA01020 + 119 "Arctic Cisco" F-COAU AFCHA01030 + 120 "Lake Whitefish" F-COCL AFCHA01040 + 121 "Broad Whitefish" F-CONA AFCHA01090 + 122 "Least Cisco" F-COSR AFCHA01130 + 123 "Roughscale Grenadier" F-COAC AFCMC06010 + 124 "Russet Grenadier" F-COAM AFCMC06020 + 125 "Popeye" F-COCI AFCMC06030 + 126 "Filamented Rattail" F-COFI AFCMC06040 + 127 "Ghostly Grenadier" F-COLE AFCMC06050 + 128 "Rough Abyssal Grendie~ F-COYA AFCMC06080 + 129 "Coastrange Sculpin" F-COAL AFC4E02010 + 130 "Cultus Pygmy Sculpin" Cultus Lake Sculpin;C~ F-COSP-02 AFC4E02270 + 131 "Prickly Sculpin" F-COAS AFC4E02020 + 132 "Slimy Sculpin" F-COCO AFC4E02080 + 133 "Shorthead Sculpin" F-COCN AFC4E02090 + 134 "Columbia Sculpin" F-COHU AFC4E02053 + 135 "Torrent Sculpin" F-CORH AFC4E02220 + 136 "Spoonhead Sculpin" F-CORI AFC4E02230 + 137 "Rocky Mountain Sculpi~ F-COSP-04 AFC4E02380 + 138 "Lake Chub" F-COPL AFCJB06010 + 139 "Lake Chub - Liard Hot~ Lake Chub - Hotspring~ F-COPL-02 AFCJB06012 + 140 "Lake Chub - Atlin War~ Lake Chub - Hotspring~ F-COPL-03 AFCJB06013 + 141 "Dwarf Wrymouth" F-CRAL AFCSF01020 + 142 "Giant Wrymouth" F-CRGI AFCSF01030 + 143 "Brook Stickleback" F-CUIN AFCPA02010 + 144 "Yellow Bristlemouth" F-CYAT AFC7A01020 + 145 "Tan Bristlemouth" F-CYPA AFC7A01030 + 146 "Slender Bristlemouth" F-CYPS AFC7A01040 + 147 "Showy Bristlemouth" F-CYSI AFC7A01050 + 148 "Shiner Perch" F-CYAG AFCQK01010 + 149 "Common Carp" F-CYCA AFCJB08010 + 150 "Bottlelight" F-DAOC AFC7D03010 + 151 "Spinyhead Sculpin" F-DASE AFC4E28010 + 152 "Cuskpout" F-DEAL AFCS812010 + 153 "California Headlightf~ F-DITH AFCVH02010 + 154 "Humpback Snailfish" F-ELCA AFC4G10070 + 155 "Deepsea Sole" F-EMBA AFCTB03010 + 156 "Striped Seaperch" F-EMLA AFCQK05020 + 157 "Northern Anchovy" F-ENMO AFCFB04020 + 158 "Buffalo Sculpin" F-ENBI AFC4E29010 + 159 "Leister Sculpin" F-ENLU AFC4E29030 + 160 "Cowichan Lake Lamprey" Lake Lamprey;Vancouve~ F-ENMA AFBAA02120 + 161 "Pacific Lamprey" F-ENTR AFBAA02100 + 162 "Petrale Sole" F-EOJO AFCTB04010 + 163 "Black Hagfish" F-EPDE AFABA01010 + 164 "Pacific Hagfish" F-EPST AFABA01020 + 165 "Skilfish" F-ERZO AFC4C02010 + 166 "Northern Pike" F-ESLU AFCHD01020 + 167 "Pacific Spiny Lumpsuc~ F-EUOR AFC4G13030 + 168 "Pacific Cod" F-GAMA AFCMA08010 + 169 "Soupfin Shark" Tope F-GAGA AFDDG02030 + 170 "Threespine Sticklebac~ F-GAAC AFCPA03010 + 171 "Charlotte Unarmoured ~ Charlotte Unarmoured ~ F-GAAC-01 AFCPA03014 + 172 "Little Quarry Lake Be~ F-GAAC-02 AFCPA03016 + 173 "Little Quarry Limneti~ F-GAAC-03 AFCPA03017 + 174 "Giant Threespine Stic~ Giant Black Stickleba~ F-GASP-01 AFCPA03X10 + 175 "Hadley Lake Limnetic ~ F-GASP-12 AFCPA03140 + 176 "Hadley Lake Benthic S~ F-GASP-13 AFCPA03150 + 177 "Vananda Creek Limneti~ F-GASP-16 AFCPA03180 + 178 "Vananda Creek Benthic~ F-GASP-17 AFCPA03190 + 179 "Misty Lake \"Lake\" S~ F-GASP-18 AFCPA03200 + 180 "Misty Lake \"Stream\"~ F-GASP-19 AFCPA03210 + 181 "Enos Lake Limnetic St~ F-GASP-02 AFCPA03040 + 182 "Enos Lake Benthic Sti~ F-GASP-03 AFCPA03050 + 183 "Paxton Lake Limnetic ~ F-GASP-04 AFCPA03060 + 184 "Paxton Lake Benthic S~ F-GASP-05 AFCPA03070 + 185 "White Croaker" F-GELI AFCQH13010 + 186 "Striped Kelpfish" F-GIME AFCQQ08030 + 187 "Crevice Kelpfish" F-GIMO AFCQQ08040 + 188 "Rex Sole" F-GLZA AFCTB21010 + 189 "Northern Clingfish" F-GOMA AFCXA02020 + 190 "Armorhead Sculpin" F-GYGA AFC4E19020 + 191 "Flabby Whalefish" F-GYSP AFC9B01010 + 192 "Slender Codling" F-HAJO AFCMH04010 + 193 "Red Irish Lord" F-HEHE AFC4E31010 + 194 "Brown Irish Lord" F-HESP AFC4E31040 + 195 "Bigmouth Sculpin" F-HEBO AFC4E20020 + 196 "Giant Kelpfish" F-HERO AFCQQ10010 + 197 "Kelp Greenling" F-HEDE AFC4D01010 + 198 "Rock Greenling" F-HELA AFC4D01020 + 199 "Masked Greenling" F-HEOC AFC4D01030 + 200 "Whitespotted Greenlin~ F-HEST AFC4D01040 + `Global Status` Global Status Review ~2 `Prov Status` Prov Status Review D~3 + + 1 GNR SNR + 2 GNR SNR + 3 G3 04-Jan-04 S2S3N 15-May-19 + 4 G4 12-Nov-02 S2 27-Apr-18 + 5 G4T1Q 17-Feb-06 S1 24-Apr-18 + 6 G4T3T4 29-Jan-03 S1 24-Apr-18 + 7 G4T2 20-Mar-02 S1S2 24-Apr-18 + 8 G4T1 05-Oct-01 S2 19-Apr-18 + 9 G5 12-Oct-11 S4 15-May-19 + 10 GNR SNR + 11 GNR SNR + 12 G5 24-Dec-17 SNR + 13 GNR SNR + 14 GNR SNR + 15 GNR SNR + 16 GNR SNR + 17 GNR SNR + 18 G5 27-Dec-17 SNA 15-May-19 + 19 GNR SNR + 20 G5 17-Aug-15 SNA 15-May-19 + 21 G5 17-Aug-15 SNA 15-May-19 + 22 G5 19-Apr-17 SNR + 23 GNR SNR + 24 G5 09-Feb-17 SNR + 25 GNR SNR + 26 GNR SNR + 27 GNR SNR + 28 G5 21-Dec-17 SNR + 29 G5 22-Dec-17 SNR + 30 GNR SNR + 31 GNR SNR + 32 GNR SNR + 33 GNR SNR + 34 GNR SNR + 35 GNR SNR + 36 GNR SNR + 37 G5 26-Dec-17 SNR + 38 G5 23-Mar-09 SNR + 39 GNR SNR + 40 GNR SNR + 41 GNR SNR + 42 GNR SNR + 43 GNR SNR + 44 GNR SNR + 45 G5 22-Dec-17 SNR + 46 GNR SNR + 47 GNR SNR + 48 G5 22-Dec-17 SNR + 49 GNR SNR + 50 GNR SNR + 51 GNR SNR + 52 GNR SNR + 53 GNR SNR + 54 GNR SNR + 55 GNR SNR + 56 GNR SNR + 57 GNR SNR + 58 GNR SNR + 59 GNR SNR + 60 GNR SNR + 61 GNR SNR + 62 GNR SNR + 63 G5 19-Apr-17 SNR + 64 G5 19-Feb-08 SNR + 65 GNR SNR + 66 GNR SNR + 67 GNR SNR + 68 GNR SNR + 69 GNR SNR + 70 GNR SNR + 71 GNR SNR + 72 GNR SNR + 73 GNR SNR + 74 G5 22-Dec-17 SNR + 75 GNR SNR + 76 GNR SNR + 77 G5 22-Dec-17 SNR + 78 GNR SNR + 79 GNR SNR + 80 GNR SNR + 81 G5 13-Sep-96 SNA 15-May-19 + 82 G2 30-Jun-14 SNR + 83 GNR SNR + 84 GNR SNR + 85 GNR SNR + 86 GNR SNR + 87 GNR SNR + 88 GNR SNR + 89 G5 17-Aug-15 S5 15-May-19 + 90 G5 09-Feb-16 S5 15-May-19 + 91 G5 17-Aug-15 S5 15-May-19 + 92 G5 10-May-16 S5 15-May-19 + 93 G5 09-Feb-16 S3? 15-May-19 + 94 G1 22-Jun-11 S2 15-May-19 + 95 GNR SNR + 96 G5 26-Dec-17 SNR + 97 GNR SNR + 98 G2G3 30-Jun-14 SNR + 99 GNR SNR + 100 G5 22-Dec-17 SNR + 101 GNR SNR + 102 GNR SNR + 103 GNR SNR + 104 GNR SNR + 105 GNR SNR + 106 G5 17-Aug-15 S4 15-Mar-19 + 107 GNA 18-Oct-02 S2 15-May-19 + 108 G5 10-May-16 S4S5 15-May-19 + 109 G5 22-Dec-17 SNR + 110 G5 22-Dec-17 SNR + 111 G5 25-Sep-96 SNR + 112 GNR SNR + 113 G5 08-Jan-97 SNR + 114 GNR SNR + 115 GNR SNR + 116 G5 22-Dec-17 SNR + 117 GNR SNR + 118 G5 17-Aug-15 S2 15-Mar-19 + 119 G5 04-Nov-11 S1S2 15-May-19 + 120 G5 17-Aug-15 S5 15-May-19 + 121 G5 02-Aug-16 S2 15-May-19 + 122 G5 27-Dec-17 S3 15-Mar-19 + 123 GNR SNR + 124 GNR SNR + 125 GNR SNR + 126 GNR SNR + 127 GNR SNR + 128 GNR SNR + 129 G5 22-Sep-15 S5 15-May-19 + 130 G1G2 11-May-10 S1S2 15-May-19 + 131 G5 22-Sep-15 S5 15-May-19 + 132 G5 17-Aug-15 S5 15-May-19 + 133 G5 09-Nov-11 S3 15-May-19 + 134 G4Q 09-Nov-11 S3 15-May-19 + 135 G5 09-Feb-16 S4S5 15-May-19 + 136 G5 17-Aug-15 S4 15-May-19 + 137 G3G4 20-Jan-09 S2 15-May-19 + 138 G5 17-Aug-15 S5 15-May-19 + 139 G5TNR S1S2 15-May-19 + 140 G5TNR S1 15-May-19 + 141 GNR SNR + 142 GNR SNR + 143 G5 17-Aug-15 S5 30-Mar-18 + 144 GNR SNR + 145 GNR SNR + 146 GNR SNR + 147 GNR SNR + 148 G5 22-Dec-17 SNR + 149 G5 13-Sep-96 SNA 15-May-19 + 150 GNR SNR + 151 GNR SNR + 152 GNR SNR + 153 G5 22-Dec-17 SNR + 154 GNR SNR + 155 GNR SNR + 156 G5 22-Dec-17 SNR + 157 GNR SNR + 158 GNR SNR + 159 GNR SNR + 160 G1G2 29-Nov-18 S2 15-May-19 + 161 G4 23-Feb-12 S5 15-May-19 + 162 G5 22-Dec-17 SNR + 163 GNR SNR + 164 G5 22-Dec-17 SNR + 165 GNR SNR + 166 G5 17-Aug-15 S5 12-Jan-04 + 167 GNR SNR + 168 G5 22-Dec-17 SNR + 169 GNR SNR + 170 G5 27-Dec-17 S5 30-Mar-18 + 171 G5T2 05-Jul-19 S1S2 30-Mar-18 + 172 G5TNR S1 15-May-19 + 173 G5TNR S1 15-May-19 + 174 G1 05-Jul-19 S1S2 30-Mar-18 + 175 GX 29-Nov-18 SX 30-Mar-18 + 176 GX 29-Nov-18 SX 30-Mar-18 + 177 G1 29-Nov-18 S1 30-Mar-18 + 178 G1 29-Nov-18 S1 30-Mar-18 + 179 G1 29-Nov-18 S1 30-Mar-18 + 180 G1 29-Nov-18 S1 30-Mar-18 + 181 G1 05-Jul-19 SX 30-Mar-18 + 182 G1 29-Nov-18 SX 30-Apr-18 + 183 G1 29-Nov-18 S1 30-Mar-18 + 184 G1 04-Feb-16 S1 30-Mar-18 + 185 GNR SNR + 186 GNR SNR + 187 GNR SNR + 188 G5 22-Dec-17 SNR + 189 GNR SNR + 190 GNR SNR + 191 GNR SNR + 192 GNR SNR + 193 GNR SNR + 194 GNR SNR + 195 GNR SNR + 196 GNR SNR + 197 G5 22-Dec-17 SNR + 198 GNR SNR + 199 GNR SNR + 200 G5 22-Dec-17 SNR + # i 350 more rows + # i abbreviated names: 1: `English Name Synonyms`, 2: `Global Status Review Date`, 3: `Prov Status Review Date` + # i 35 more variables: `Prov Status Change Date` , COSEWIC , `COSEWIC Comments` , `BC List` , `Provincial FRPA` , `Land Use Objectives` , Ecosection , + # `Prov Wildlife Act` , GOERT , MBCA , SARA , `SARA Comments` , `General Status Canada` , CITES , `Name Category` , `Class (English)` , + # `Species Level` , Kingdom , Phylum , Class , Order , Family , `Forest Dist` , `MOE Region` , `Regional Dist` , Municipality , BGC , + # `Habitat Subtype` , Origin , Presence , `Breeding Bird` , `Ecosystem Group` , Endemic , `CDC Maps` , `Mapping Status` + diff --git a/tests/testthat/_snaps/freshwaterfish.md b/tests/testthat/_snaps/freshwaterfish.md new file mode 100644 index 0000000..ba0ab24 --- /dev/null +++ b/tests/testthat/_snaps/freshwaterfish.md @@ -0,0 +1,496 @@ +# freshwaterfish + + Code + print(freshwaterfish, width = 200, n = 200) + Output + # A tibble: 161 x 17 + Code CommonName Class + + 1 AF All Fish + 2 SP Fish Unidentified Species + 3 SG Sturgeon (General) Actinopterygii + 4 GSG Green Sturgeon Actinopterygii + 5 WSG White Sturgeon Actinopterygii + 6 SH American Shad Actinopterygii + 7 SU Sucker (General) Actinopterygii + 8 LSU Longnose Sucker Actinopterygii + 9 BSU Bridgelip Sucker Actinopterygii + 10 WSU White Sucker Actinopterygii + 11 CSU Largescale Sucker Actinopterygii + 12 MSU Northern Mountain Sucker Actinopterygii + 13 SSU Salish Sucker Actinopterygii + 14 OWF Oriental Weatherfish Actinopterygii + 15 C Minnow (General) Actinopterygii + 16 CBC Chub (General) Actinopterygii + 17 CPG Carp (General) Actinopterygii + 18 DC Dace (General) Actinopterygii + 19 CMC Chiselmouth Actinopterygii + 20 GC Goldfish Actinopterygii + 21 RDC Northern Redbelly Dace Actinopterygii + 22 XDC Northern Redbelly Dace x Finescale Dace Actinopterygii + 23 FDC Finescale Dace Actinopterygii + 24 LKC Lake Chub Actinopterygii + 25 CP Carp Actinopterygii + 26 BMC Brassy Minnow Actinopterygii + 27 PDC Northern Pearl Dace Actinopterygii + 28 PCC Peamouth Chub Actinopterygii + 29 ESC Emerald Shiner Actinopterygii + 30 STC Spottail Shiner Actinopterygii + 31 FM Fathead Minnow Actinopterygii + 32 FHC Flathead Chub Actinopterygii + 33 NSC Northern Pikeminnow Actinopterygii + 34 LNC Longnose Dace Actinopterygii + 35 NDC Nooksack Dace Actinopterygii + 36 LDC Leopard Dace Actinopterygii + 37 SDC Speckled Dace Actinopterygii + 38 UDC Umatilla Dace Actinopterygii + 39 RSC Redside Shiner Actinopterygii + 40 TC Tench Actinopterygii + 41 GAM Mosquitofish Actinopterygii + 42 NP Northern Pike Actinopterygii + 43 TMP Tiger Muskellunge Actinopterygii + 44 BB Burbot Actinopterygii + 45 SB Stickleback (General) Actinopterygii + 46 BSB Brook Stickleback Actinopterygii + 47 SB3 Charlotte Unarmoured Threespine Stickleback Actinopterygii + 48 TSB Threespine Stickleback Actinopterygii + 49 CSB Unarmoured Stickleback Actinopterygii + 50 SB1 Balkwill Lake Benthic Stickleback Actinopterygii + 51 SB11 Lake Sticklebacks Actinopterygii + 52 SB2 Balkwill Lake Limnetic Stickleback Actinopterygii + 53 SB4 Emily Lake Benthic Stickleback Actinopterygii + 54 SB5 Emily Lake Limnetic Stickleback Actinopterygii + 55 SBB Priest Lake Benthic Stickleback Actinopterygii + 56 SBP Priest Lake Limnetic Stickleback Actinopterygii + 57 SB8 Giant Stickleback Actinopterygii + 58 SB10 Hadley Lake Limnetic Stickleback Actinopterygii + 59 SB9 Hadley Lake Benthic Stickleback Actinopterygii + 60 SB14 Misty Lake Lake Stickleback Actinopterygii + 61 SB15 Misty Lake Stream Stickleback Actinopterygii + 62 SB7 Enos Lake Limnetic Stickleback Actinopterygii + 63 SB6 Enos Lake Benthic Stickleback Actinopterygii + 64 SB13 Paxton Lake Limnetic Stickleback Actinopterygii + 65 SB12 Paxton Lake Benthic Stickleback Actinopterygii + 66 NSB Ninespine Stickleback Actinopterygii + 67 GE Goldeye Actinopterygii + 68 SM Smelt (General) Actinopterygii + 69 SSM Surf Smelt Actinopterygii + 70 RSM Rainbow Smelt Actinopterygii + 71 LSM Longfin Smelt Actinopterygii + 72 PLS Pygmy Longfin Smelt Actinopterygii + 73 EU Eulachon Actinopterygii + 74 BS Bass/Sunfish (General) Actinopterygii + 75 PMB Pumpkinseed Actinopterygii + 76 BG Bluegill Actinopterygii + 77 SMB Smallmouth Bass Actinopterygii + 78 LMB Largemouth Bass Actinopterygii + 79 BCB Black Crappie Actinopterygii + 80 CHMC Blotched Snakehead Actinopterygii + 81 CYAG Shiner Perch Actinopterygii + 82 P Perch (General) Actinopterygii + 83 YP Yellow Perch Actinopterygii + 84 WP Walleye Actinopterygii + 85 TP Trout-Perch Actinopterygii + 86 SA Salmon (General) Actinopterygii + 87 TR Unidentifiable Trout - only fry <70mm in length Actinopterygii + 88 WF Whitefish (General) Actinopterygii + 89 CL Cisco Actinopterygii + 90 CA Arctic Cisco Actinopterygii + 91 LW Lake Whitefish Actinopterygii + 92 CB Bering Cisco Actinopterygii + 93 BW Broad Whitefish Actinopterygii + 94 CS Least Cisco Actinopterygii + 95 DLW Dragon Lake Whitefish Actinopterygii + 96 SQ Squanga Actinopterygii + 97 AO All Pacific Salmon Actinopterygii + 98 ACT Cutthroat Trout (Anadromous) Actinopterygii + 99 CT Cutthroat Trout Actinopterygii + 100 CRS Cutthroat/Rainbow cross Actinopterygii + 101 CCT Coastal Cutthroat Trout Actinopterygii + 102 WCT Westslope Cutthroat Trout Actinopterygii + 103 PK Pink Salmon Actinopterygii + 104 CM Chum Salmon Actinopterygii + 105 CO Coho Salmon Actinopterygii + 106 RB Rainbow Trout Actinopterygii + 107 SST Steelhead (Summer-run) Actinopterygii + 108 ST Steelhead Actinopterygii + 109 WST Steelhead (Winter-run) Actinopterygii + 110 GT Golden Trout Actinopterygii + 111 KO Kokanee Actinopterygii + 112 SK Sockeye Salmon Actinopterygii + 113 CH Chinook Salmon Actinopterygii + 114 GPW Giant Pygmy Whitefish Actinopterygii + 115 PW Pygmy Whitefish Actinopterygii + 116 RW Round Whitefish Actinopterygii + 117 MW Mountain Whitefish Actinopterygii + 118 MWxRW Mountain x Round Whitefish hybrid Actinopterygii + 119 AS Atlantic Salmon Actinopterygii + 120 AGB Brown Trout (Anadromous) Actinopterygii + 121 GB Brown Trout Actinopterygii + 122 SLV Char (General) Actinopterygii + 123 AC Arctic Char Actinopterygii + 124 ABT Bull Trout (Anadromous) Actinopterygii + 125 BT Bull Trout Actinopterygii + 126 AEB Brook Trout (Anadromous) Actinopterygii + 127 EB Brook Trout Actinopterygii + 128 SPK Splake Actinopterygii + 129 ADV Dolly Varden (Anadromous) Actinopterygii + 130 DV Dolly Varden Actinopterygii + 131 DVxBT Verified DV BT hybrid Actinopterygii + 132 LT Lake Trout Actinopterygii + 133 IN Inconnu Actinopterygii + 134 GR Arctic Grayling Actinopterygii + 135 MG Montana Grayling Actinopterygii + 136 CC Sculpin (General) Actinopterygii + 137 CCA Sharpnose Sculpin Actinopterygii + 138 CAL Coastrange Sculpin (formerly Aleutian Sculpin) Actinopterygii + 139 CCL Cultus Lake Sculpin Actinopterygii + 140 CAS Prickly Sculpin Actinopterygii + 141 CBA Mottled Sculpin Actinopterygii + 142 CMM Malheur Mottled Sculpin Actinopterygii + 143 CCG Slimy Sculpin Actinopterygii + 144 CCN Shorthead Sculpin Actinopterygii + 145 CCH Columbia Sculpin Actinopterygii + 146 CRH Torrent Sculpin Actinopterygii + 147 CRI Spoonhead Sculpin Actinopterygii + 148 CRM Rocky Mountain Sculpin Actinopterygii + 149 CLA Staghorn Sculpin Actinopterygii + 150 CMT Deepwater Sculpin Actinopterygii + 151 BH Bullhead (General) Actinopterygii + 152 BKH Black Bullhead Actinopterygii + 153 YB Yellow Bullhead Actinopterygii + 154 BNH Brown Bullhead Actinopterygii + 155 L Lamprey (General) Petromyzontida + 156 RL River Lamprey Petromyzontida + 157 LL Cowichan Lake Lamprey Petromyzontida + 158 BL Western Brook Lamprey Petromyzontida + 159 MCL Morrison Creek Lamprey Petromyzontida + 160 AL Arctic Lamprey Petromyzontida + 161 PL Pacific Lamprey Petromyzontida + Order Family Genus Species Subspecies + + 1 + 2 + 3 Acipenseriformes Acipenseridae Acipenser + 4 Acipenseriformes Acipenseridae Acipenser medirostris + 5 Acipenseriformes Acipenseridae Acipenser transmontanus + 6 Clupeiformes Clupeidae Alosa sapidissima + 7 Cypriniformes Catostomidae + 8 Cypriniformes Catostomidae Catostomus catostomus + 9 Cypriniformes Catostomidae Catostomus columbianus + 10 Cypriniformes Catostomidae Catostomus commersonii + 11 Cypriniformes Catostomidae Catostomus macrocheilus + 12 Cypriniformes Catostomidae Catostomus platyrhynchus + 13 Cypriniformes Catostomidae Catostomus sp. 4 + 14 Cypriniformes Cobitidae Misgurnus anguillicaudatus + 15 Cypriniformes Cyprinidae + 16 Cypriniformes Cyprinidae + 17 Cypriniformes Cyprinidae + 18 Cypriniformes Cyprinidae + 19 Cypriniformes Cyprinidae Acrocheilus alutaceus + 20 Cypriniformes Cyprinidae Carassius auratus + 21 Cypriniformes Cyprinidae Chrosomus eos + 22 Cypriniformes Cyprinidae Chrosomus eos + 23 Cypriniformes Cyprinidae Chrosomus neogaeus + 24 Cypriniformes Cyprinidae Couesius plumbeus + 25 Cypriniformes Cyprinidae Cyprinus carpio + 26 Cypriniformes Cyprinidae Hybognathus hankinsoni + 27 Cypriniformes Cyprinidae Margariscus margarita + 28 Cypriniformes Cyprinidae Mylocheilus caurinus + 29 Cypriniformes Cyprinidae Notropis atherinoides + 30 Cypriniformes Cyprinidae Notropis hudsonius + 31 Cypriniformes Cyprinidae Pimephales promelas + 32 Cypriniformes Cyprinidae Platygobio gracilis + 33 Cypriniformes Cyprinidae Ptychocheilus oregonensis + 34 Cypriniformes Cyprinidae Rhinichthys cataractae + 35 Cypriniformes Cyprinidae Rhinichthys cataractae + 36 Cypriniformes Cyprinidae Rhinichthys falcatus + 37 Cypriniformes Cyprinidae Rhinichthys osculus + 38 Cypriniformes Cyprinidae Rhinichthys umatilla + 39 Cypriniformes Cyprinidae Richardsonius balteatus + 40 Cypriniformes Cyprinidae Tinca tinca + 41 Cyprinodontiformes Poeciliidae Gambusia affinis + 42 Esociformes Esocidae Esox lucius + 43 Esociformes Esocidae Esox lucius + 44 Gadiformes Gadidae Lota lota + 45 Gasterosteiformes Gasterosteidae + 46 Gasterosteiformes Gasterosteidae Culaea inconstans + 47 Gasterosteiformes Gasterosteidae Gasterosteus aculeatus + 48 Gasterosteiformes Gasterosteidae Gasterosteus aculeatus + 49 Gasterosteiformes Gasterosteidae Gasterosteus sp + 50 Gasterosteiformes Gasterosteidae Gasterosteus sp + 51 Gasterosteiformes Gasterosteidae Gasterosteus sp + 52 Gasterosteiformes Gasterosteidae Gasterosteus sp + 53 Gasterosteiformes Gasterosteidae Gasterosteus sp + 54 Gasterosteiformes Gasterosteidae Gasterosteus sp + 55 Gasterosteiformes Gasterosteidae Gasterosteus sp + 56 Gasterosteiformes Gasterosteidae Gasterosteus sp + 57 Gasterosteiformes Gasterosteidae Gasterosteus sp. 1 + 58 Gasterosteiformes Gasterosteidae Gasterosteus sp. 12 + 59 Gasterosteiformes Gasterosteidae Gasterosteus sp. 13 + 60 Gasterosteiformes Gasterosteidae Gasterosteus sp. 18 + 61 Gasterosteiformes Gasterosteidae Gasterosteus sp. 19 + 62 Gasterosteiformes Gasterosteidae Gasterosteus sp. 2 + 63 Gasterosteiformes Gasterosteidae Gasterosteus sp. 3 + 64 Gasterosteiformes Gasterosteidae Gasterosteus sp. 4 + 65 Gasterosteiformes Gasterosteidae Gasterosteus sp. 5 + 66 Gasterosteiformes Gasterosteidae Pungitius pungitius + 67 Hiodontiformes Hiodontidae Hiodon alosoides + 68 Osmeriformes Osmeridae + 69 Osmeriformes Osmeridae Hypomesus pretiosus + 70 Osmeriformes Osmeridae Osmerus dentex + 71 Osmeriformes Osmeridae Spirinchus thaleichthys + 72 Osmeriformes Osmeridae Spirincus sp. 1 + 73 Osmeriformes Osmeridae Thaleichthys pacificus + 74 Perciformes Centrarchidae + 75 Perciformes Centrarchidae Lepomis gibbosus + 76 Perciformes Centrarchidae Lepomis macrochirus + 77 Perciformes Centrarchidae Micropterus dolomieui + 78 Perciformes Centrarchidae Micropterus salmoides + 79 Perciformes Centrarchidae Pomoxis nigromaculatus + 80 Perciformes Channidae Channa maculata + 81 Perciformes Embiotocidae Cymatogaster aggregata + 82 Perciformes Percidae + 83 Perciformes Percidae Perca flavescens + 84 Perciformes Percidae Sander vitreus + 85 Percopsiformes Percopsidae Percopsis omiscomaycus + 86 Salmoniformes Salmonidae + 87 Salmoniformes Salmonidae + 88 Salmoniformes Salmonidae + 89 Salmoniformes Salmonidae Coregonus artedi + 90 Salmoniformes Salmonidae Coregonus autumnalis + 91 Salmoniformes Salmonidae Coregonus clupeaformis + 92 Salmoniformes Salmonidae Coregonus laurettae + 93 Salmoniformes Salmonidae Coregonus nasus + 94 Salmoniformes Salmonidae Coregonus sardinella + 95 Salmoniformes Salmonidae Coregonus sp + 96 Salmoniformes Salmonidae Coregonus sp + 97 Salmoniformes Salmonidae Oncorhynchus + 98 Salmoniformes Salmonidae Oncorhynchus clarkii + 99 Salmoniformes Salmonidae Oncorhynchus clarkii + 100 Salmoniformes Salmonidae Oncorhynchus clarkii + 101 Salmoniformes Salmonidae Oncorhynchus clarkii clarkii + 102 Salmoniformes Salmonidae Oncorhynchus clarkii lewisi + 103 Salmoniformes Salmonidae Oncorhynchus gorbuscha + 104 Salmoniformes Salmonidae Oncorhynchus keta + 105 Salmoniformes Salmonidae Oncorhynchus kisutch + 106 Salmoniformes Salmonidae Oncorhynchus mykiss + 107 Salmoniformes Salmonidae Oncorhynchus mykiss + 108 Salmoniformes Salmonidae Oncorhynchus mykiss + 109 Salmoniformes Salmonidae Oncorhynchus mykiss + 110 Salmoniformes Salmonidae Oncorhynchus mykiss aguabonita + 111 Salmoniformes Salmonidae Oncorhynchus nerka + 112 Salmoniformes Salmonidae Oncorhynchus nerka + 113 Salmoniformes Salmonidae Oncorhynchus tshawytscha + 114 Salmoniformes Salmonidae Prosopium coulterii + 115 Salmoniformes Salmonidae Prosopium coulterii + 116 Salmoniformes Salmonidae Prosopium cyclindraceum + 117 Salmoniformes Salmonidae Prosopium williamsoni + 118 Salmoniformes Salmonidae Prosopium williamsoni + 119 Salmoniformes Salmonidae Salmo salar + 120 Salmoniformes Salmonidae Salmo trutta + 121 Salmoniformes Salmonidae Salmo trutta + 122 Salmoniformes Salmonidae Salvelinus + 123 Salmoniformes Salmonidae Salvelinus alpinus + 124 Salmoniformes Salmonidae Salvelinus confluentus + 125 Salmoniformes Salmonidae Salvelinus confluentus + 126 Salmoniformes Salmonidae Salvelinus fontinalis + 127 Salmoniformes Salmonidae Salvelinus fontinalis + 128 Salmoniformes Salmonidae Salvelinus fontinalis + 129 Salmoniformes Salmonidae Salvelinus malma + 130 Salmoniformes Salmonidae Salvelinus malma + 131 Salmoniformes Salmonidae Salvelinus malma + 132 Salmoniformes Salmonidae Salvelinus namaycush + 133 Salmoniformes Salmonidae Stenodus leucichthys + 134 Salmoniformes Salmonidae Thymallus arcticus + 135 Salmoniformes Salmonidae Thymallus arcticus montanus + 136 Scorpaeniformes Cottidae + 137 Scorpaeniformes Cottidae Clinocottus acuticeps + 138 Scorpaeniformes Cottidae Cottus aleuticus + 139 Scorpaeniformes Cottidae Cottus aleuticus + 140 Scorpaeniformes Cottidae Cottus asper + 141 Scorpaeniformes Cottidae Cottus bairdi + 142 Scorpaeniformes Cottidae Cottus bendirei + 143 Scorpaeniformes Cottidae Cottus cognatus + 144 Scorpaeniformes Cottidae Cottus confusus + 145 Scorpaeniformes Cottidae Cottus hubbsi + 146 Scorpaeniformes Cottidae Cottus rhotheus + 147 Scorpaeniformes Cottidae Cottus ricei + 148 Scorpaeniformes Cottidae Cottus sp. 9 + 149 Scorpaeniformes Cottidae Leptocottus armatus + 150 Scorpaeniformes Cottidae Myoxocephalus thompsoni + 151 Siluriformes Ictaluridae Ameiurus + 152 Siluriformes Ictaluridae Ameiurus melas + 153 Siluriformes Ictaluridae Ameiurus natalis + 154 Siluriformes Ictaluridae Ameiurus nebulosus + 155 Petromyzontiformes + 156 Petromyzontiformes Petromyzontidae Lampetra ayresii + 157 Petromyzontiformes Petromyzontidae Lampetra macrostoma + 158 Petromyzontiformes Petromyzontidae Lampetra richardsoni + 159 Petromyzontiformes Petromyzontidae Lampetra richardsoni marifaga + 160 Petromyzontiformes Petromyzontidae Lampetra sp + 161 Petromyzontiformes Petromyzontidae Lampetra tridentata + Species2 Extant Native Marine Yellow Blue Red CDCode ABCode + + 1 TRUE TRUE TRUE TRUE TRUE TRUE ARCH + 2 TRUE TRUE TRUE TRUE TRUE TRUE ARLM + 3 TRUE TRUE TRUE FALSE TRUE TRUE CRTR + 4 TRUE TRUE TRUE FALSE TRUE FALSE F-ACME + 5 TRUE TRUE TRUE FALSE FALSE TRUE F-ACTR + 6 TRUE FALSE TRUE FALSE FALSE FALSE F-ALSA + 7 TRUE TRUE FALSE TRUE TRUE TRUE DPSC + 8 TRUE TRUE FALSE TRUE FALSE FALSE F-CACT LNSC + 9 TRUE TRUE FALSE TRUE FALSE FALSE F-CACO + 10 TRUE TRUE FALSE TRUE FALSE FALSE F-CACM WHSC + 11 TRUE TRUE FALSE TRUE FALSE FALSE F-CAMA LRSC + 12 TRUE TRUE FALSE FALSE TRUE FALSE F-CAPL MNSC + 13 TRUE TRUE FALSE FALSE FALSE TRUE F-CASP-04 + 14 TRUE FALSE FALSE FALSE FALSE FALSE FAMCATO + 15 TRUE TRUE FALSE TRUE TRUE FALSE FAMCYPR + 16 TRUE TRUE FALSE TRUE FALSE TRUE + 17 TRUE TRUE FALSE TRUE TRUE TRUE + 18 TRUE TRUE FALSE TRUE FALSE TRUE SPLA + 19 TRUE TRUE FALSE TRUE FALSE FALSE F-ACAL + 20 TRUE FALSE FALSE FALSE FALSE FALSE F-CAAU GOFS + 21 TRUE TRUE FALSE TRUE FALSE FALSE F-CHEO NRDC + 22 neogaeus TRUE TRUE FALSE FALSE FALSE TRUE F-CHEOxCHNE NFDC + 23 TRUE TRUE FALSE TRUE FALSE FALSE F-CHNE FNDC + 24 TRUE TRUE FALSE TRUE FALSE FALSE F-COPL LKCH + 25 TRUE FALSE FALSE FALSE FALSE FALSE F-CYCA + 26 TRUE TRUE FALSE FALSE FALSE FALSE F-HYHA BRMN + 27 nachtriebi TRUE TRUE FALSE TRUE FALSE FALSE + 28 TRUE TRUE FALSE TRUE FALSE FALSE F-MYCA PMCH + 29 TRUE TRUE FALSE FALSE FALSE FALSE F-NOAT EMSH + 30 TRUE TRUE FALSE FALSE FALSE TRUE F-NOHU SPSH + 31 TRUE FALSE FALSE FALSE FALSE FALSE F-PIPR FTMN + 32 TRUE TRUE FALSE TRUE FALSE FALSE F-PLGR FLCH + 33 TRUE TRUE FALSE TRUE FALSE FALSE F-PTOR NRSQ + 34 TRUE TRUE FALSE TRUE FALSE FALSE F-RHCA LNDC + 35 TRUE TRUE FALSE FALSE FALSE TRUE F-RHCA-CH + 36 TRUE TRUE FALSE TRUE FALSE FALSE F-RHFA + 37 TRUE TRUE FALSE FALSE TRUE FALSE F-RHOS + 38 TRUE TRUE FALSE FALSE FALSE TRUE F-RHUM + 39 TRUE TRUE FALSE TRUE FALSE FALSE F-RIBA RDSH + 40 TRUE FALSE FALSE FALSE FALSE FALSE F-TITI + 41 TRUE FALSE FALSE FALSE FALSE FALSE + 42 TRUE TRUE FALSE TRUE FALSE FALSE F-ESLU NRPK + 43 masquinongy TRUE TRUE FALSE TRUE FALSE FALSE + 44 TRUE TRUE FALSE TRUE FALSE TRUE F-LOLO BURB + 45 TRUE TRUE TRUE TRUE FALSE TRUE + 46 TRUE TRUE FALSE TRUE FALSE FALSE F-CUIN BRST + 47 TRUE TRUE FALSE FALSE FALSE TRUE F-GAAC-01 + 48 TRUE TRUE TRUE TRUE FALSE FALSE F-GAAC THST + 49 TRUE TRUE FALSE FALSE FALSE FALSE + 50 TRUE TRUE FALSE FALSE FALSE FALSE + 51 TRUE TRUE FALSE FALSE FALSE TRUE + 52 TRUE TRUE FALSE FALSE FALSE FALSE + 53 TRUE TRUE FALSE FALSE FALSE FALSE + 54 TRUE TRUE FALSE FALSE FALSE FALSE + 55 TRUE TRUE FALSE FALSE FALSE FALSE + 56 TRUE TRUE FALSE FALSE FALSE FALSE + 57 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-01 + 58 FALSE TRUE FALSE FALSE FALSE FALSE F-GASP-12 + 59 FALSE TRUE FALSE FALSE FALSE FALSE F-GASP-13 + 60 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-18 + 61 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-19 + 62 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-02 + 63 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-03 + 64 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-04 + 65 TRUE TRUE FALSE FALSE FALSE TRUE F-GASP-05 + 66 TRUE TRUE TRUE FALSE FALSE FALSE F-PUPU NNST + 67 TRUE TRUE FALSE FALSE TRUE FALSE F-HIAL GOLD + 68 TRUE TRUE TRUE FALSE TRUE TRUE + 69 TRUE TRUE TRUE FALSE FALSE FALSE F-HYPR + 70 mordax TRUE TRUE TRUE FALSE FALSE FALSE F-OSDE + 71 TRUE TRUE TRUE FALSE TRUE FALSE F-SPTH + 72 TRUE TRUE FALSE FALSE FALSE TRUE F-SPSP-01 + 73 TRUE TRUE TRUE FALSE TRUE FALSE F-THPA + 74 TRUE FALSE FALSE FALSE FALSE FALSE + 75 TRUE FALSE FALSE FALSE FALSE FALSE F-LEGI + 76 TRUE FALSE FALSE FALSE FALSE FALSE F-LPMA + 77 TRUE FALSE FALSE FALSE FALSE FALSE F-MIDO SMBS + 78 TRUE FALSE FALSE FALSE FALSE FALSE F-MISA + 79 TRUE FALSE FALSE FALSE FALSE FALSE F-PONI + 80 TRUE FALSE FALSE FALSE FALSE FALSE + 81 TRUE TRUE TRUE FALSE FALSE FALSE F-CYAG + 82 TRUE TRUE FALSE TRUE FALSE FALSE + 83 TRUE TRUE FALSE TRUE FALSE FALSE F-PEFL YLPR + 84 TRUE TRUE FALSE TRUE FALSE FALSE F-SAVI WALL + 85 TRUE TRUE FALSE TRUE FALSE FALSE F-PEOM TRPR + 86 TRUE TRUE TRUE TRUE FALSE FALSE + 87 TRUE TRUE TRUE TRUE TRUE TRUE + 88 TRUE TRUE TRUE TRUE TRUE TRUE + 89 TRUE TRUE TRUE FALSE FALSE TRUE F-COAR + 90 TRUE TRUE TRUE FALSE FALSE TRUE F-COAU + 91 TRUE TRUE FALSE TRUE FALSE FALSE F-COCL LKWH + 92 TRUE TRUE TRUE FALSE FALSE FALSE + 93 TRUE TRUE FALSE FALSE FALSE TRUE F-CONA + 94 TRUE TRUE FALSE FALSE TRUE FALSE F-COSR + 95 FALSE TRUE FALSE FALSE FALSE FALSE + 96 TRUE TRUE FALSE FALSE FALSE FALSE + 97 TRUE TRUE TRUE TRUE FALSE FALSE + 98 TRUE TRUE TRUE FALSE FALSE FALSE F-ONCL CTTR + 99 TRUE TRUE FALSE FALSE FALSE FALSE F-ONCL CTTR + 100 mykiss TRUE TRUE TRUE FALSE FALSE FALSE + 101 TRUE TRUE TRUE FALSE TRUE FALSE F-ONCL-CL + 102 TRUE TRUE FALSE FALSE TRUE FALSE F-ONCL-LE WSCT + 103 TRUE TRUE TRUE TRUE FALSE FALSE F-ONGO + 104 TRUE TRUE TRUE TRUE FALSE FALSE F-ONKE + 105 TRUE TRUE TRUE TRUE FALSE FALSE F-ONKI CHSL + 106 TRUE TRUE FALSE TRUE FALSE FALSE F-ONMY GLTR + 107 TRUE TRUE TRUE TRUE FALSE TRUE F-ONMY RNTR + 108 TRUE TRUE TRUE TRUE FALSE TRUE F-ONMY + 109 TRUE TRUE TRUE TRUE FALSE TRUE F-ONMY + 110 TRUE FALSE FALSE FALSE FALSE FALSE F-ONMY + 111 TRUE TRUE FALSE FALSE FALSE FALSE F-ONNE KOKA + 112 TRUE TRUE TRUE TRUE FALSE FALSE F-ONNE + 113 TRUE TRUE TRUE TRUE FALSE FALSE F-ONTS + 114 TRUE TRUE FALSE TRUE FALSE FALSE F-PRCO-03 + 115 TRUE TRUE FALSE TRUE FALSE FALSE F-PRCO PGWH + 116 TRUE TRUE FALSE TRUE FALSE FALSE F-PRCY RNWH + 117 TRUE TRUE FALSE TRUE FALSE FALSE F-PRWI MNWH + 118 cyclindraceum TRUE TRUE FALSE TRUE FALSE FALSE + 119 TRUE FALSE TRUE FALSE FALSE FALSE F-SASA + 120 TRUE FALSE TRUE FALSE FALSE FALSE F-SATR BNTR + 121 TRUE FALSE FALSE FALSE FALSE FALSE F-SATR BNTR + 122 TRUE TRUE TRUE TRUE TRUE FALSE + 123 TRUE TRUE TRUE FALSE FALSE FALSE + 124 TRUE TRUE TRUE FALSE TRUE FALSE F-SACO BLTR + 125 TRUE TRUE FALSE FALSE TRUE FALSE F-SACO BLTR + 126 TRUE FALSE TRUE FALSE FALSE FALSE F-SAFO BKTR + 127 TRUE FALSE FALSE FALSE FALSE FALSE F-SAFO BKTR + 128 namaycush TRUE FALSE FALSE FALSE FALSE FALSE + 129 TRUE TRUE TRUE TRUE FALSE FALSE F-SAMA DLVR + 130 TRUE TRUE FALSE TRUE FALSE FALSE F-SAMA DLVR + 131 confluentus TRUE TRUE TRUE TRUE FALSE FALSE + 132 TRUE TRUE FALSE TRUE FALSE FALSE F-SANA LKTR + 133 TRUE TRUE TRUE FALSE TRUE FALSE F-STLU + 134 TRUE TRUE FALSE TRUE FALSE FALSE F-THAR ARGR + 135 TRUE TRUE FALSE TRUE TRUE TRUE + 136 TRUE TRUE TRUE FALSE FALSE FALSE + 137 TRUE TRUE TRUE FALSE FALSE FALSE F-CLAC + 138 TRUE TRUE FALSE TRUE FALSE FALSE F-COAL + 139 TRUE TRUE FALSE FALSE FALSE TRUE F-COSP-02 + 140 TRUE TRUE FALSE TRUE FALSE FALSE F-COAS PRSC + 141 TRUE TRUE FALSE FALSE TRUE FALSE + 142 TRUE TRUE FALSE FALSE FALSE FALSE + 143 TRUE TRUE FALSE TRUE FALSE FALSE F-COCO SLSC + 144 TRUE TRUE FALSE FALSE TRUE FALSE F-COCN + 145 TRUE TRUE FALSE FALSE TRUE FALSE F-COHU + 146 TRUE TRUE FALSE TRUE FALSE FALSE F-CORH + 147 TRUE TRUE FALSE TRUE FALSE FALSE F-CORI SPSC + 148 TRUE TRUE FALSE FALSE FALSE TRUE F-COSP-04 RMSC + 149 TRUE TRUE TRUE FALSE FALSE FALSE F-LEAR + 150 TRUE TRUE FALSE FALSE FALSE FALSE + 151 TRUE FALSE FALSE FALSE FALSE FALSE + 152 TRUE FALSE FALSE FALSE FALSE FALSE F-AMME + 153 TRUE FALSE FALSE FALSE FALSE FALSE F-ICNA + 154 TRUE FALSE FALSE FALSE FALSE FALSE F-AMNE + 155 TRUE TRUE TRUE TRUE FALSE TRUE + 156 TRUE TRUE TRUE TRUE FALSE FALSE F-LAAY + 157 TRUE TRUE FALSE FALSE FALSE TRUE F-ENMA + 158 TRUE TRUE FALSE TRUE FALSE FALSE F-LARC + 159 TRUE TRUE FALSE FALSE FALSE TRUE F-LARC-01 + 160 TRUE TRUE TRUE FALSE FALSE FALSE + 161 TRUE TRUE TRUE TRUE FALSE FALSE F-ENTR + diff --git a/tests/testthat/test-ab.R b/tests/testthat/test-ab.R index de6c7a3..38a7b33 100644 --- a/tests/testthat/test-ab.R +++ b/tests/testthat/test-ab.R @@ -1,5 +1,10 @@ test_that("ab", { - expect_true(chk::vld_s3_class(ab, "data.frame")) + expect_true(chk::vld_data(ab)) + + expect_snapshot({ + print(ab, width = 200, n = 200) + }) + expect_true(chk::vld_subset(c("Species Common Name", "Scientific Name", "Species Code"), colnames(ab))) expect_true(chk::vld_s3_class(ab$`Species Common Name`, "character")) diff --git a/tests/testthat/test-cdc.R b/tests/testthat/test-cdc.R index 8c64b87..19ba1b7 100644 --- a/tests/testthat/test-cdc.R +++ b/tests/testthat/test-cdc.R @@ -1,5 +1,10 @@ test_that("cdc", { - expect_true(chk::vld_s3_class(cdc, "data.frame")) + expect_true(chk::vld_data(cdc)) + + expect_snapshot({ + print(cdc, width = 200, n = 200) + }) + expect_true(chk::vld_subset(c("Species Code", "BC List"), colnames(cdc))) expect_true(chk::vld_s3_class(cdc$`Species Code`, "character")) diff --git a/tests/testthat/test-freshwaterfish.R b/tests/testthat/test-freshwaterfish.R index 2546b76..fce88e0 100644 --- a/tests/testthat/test-freshwaterfish.R +++ b/tests/testthat/test-freshwaterfish.R @@ -1,5 +1,10 @@ test_that("freshwaterfish", { - expect_true(chk::vld_s3_class(freshwaterfish, "data.frame")) + + expect_true(chk::vld_data(freshwaterfish)) + + expect_snapshot({ + print(freshwaterfish, width = 200, n = 200) + }) expect_true(chk::vld_identical( colnames(freshwaterfish), @@ -13,24 +18,6 @@ test_that("freshwaterfish", { ) )) - expect_true(chk::vld_s3_class(freshwaterfish$Code, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$CommonName, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Class, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Order, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Family, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Genus, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Species, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Subspecies, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Species2, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$Extant, "logical")) - expect_true(chk::vld_s3_class(freshwaterfish$Native, "logical")) - expect_true(chk::vld_s3_class(freshwaterfish$Marine, "logical")) - expect_true(chk::vld_s3_class(freshwaterfish$Yellow, "logical")) - expect_true(chk::vld_s3_class(freshwaterfish$Blue, "logical")) - expect_true(chk::vld_s3_class(freshwaterfish$Red, "logical")) - expect_true(chk::vld_s3_class(freshwaterfish$CDCode, "character")) - expect_true(chk::vld_s3_class(freshwaterfish$ABCode, "character")) - expect_true(chk::vld_not_any_na(freshwaterfish$Code)) expect_true(chk::vld_not_any_na(freshwaterfish$CommonName)) expect_true(chk::vld_not_any_na(freshwaterfish$Extant)) @@ -58,6 +45,6 @@ test_that("freshwaterfish", { expect_true(!anyDuplicated(unique(freshwaterfish[!is.na(freshwaterfish$Family), c("Order", "Family")])$Family)) expect_true(!anyDuplicated(unique(freshwaterfish[!is.na(freshwaterfish$Order), c("Class", "Order")])$Order)) - expect_error(chk::chk_join(freshwaterfish[!is.na(freshwaterfish$ABCode),], ab, by = c("ABCode" = "Species Code")), NA) - expect_error(chk::chk_join(freshwaterfish[!is.na(freshwaterfish$CDCode),], cdc, by = c("CDCode" = "Species Code")), NA) + expect_true(chk::vld_data(chk::chk_join(freshwaterfish[!is.na(freshwaterfish$ABCode),], ab, by = c("ABCode" = "Species Code")))) + expect_true(chk::vld_data(chk::chk_join(freshwaterfish[!is.na(freshwaterfish$CDCode),], cdc, by = c("CDCode" = "Species Code")))) }) From 955b22bb54c913a8fa736690f7be8e8b938cf831 Mon Sep 17 00:00:00 2001 From: Joe Thorley Date: Mon, 1 Apr 2024 10:04:53 -0700 Subject: [PATCH 3/3] fix workflows --- .github/workflows/R-CMD-check.yaml | 118 ++++++++------------------- .github/workflows/coverage.yaml | 49 ----------- .github/workflows/pkgdown.yaml | 71 +++++++--------- .github/workflows/test-coverage.yaml | 50 ++++++++++++ README.Rmd | 4 +- README.md | 35 ++++---- 6 files changed, 132 insertions(+), 195 deletions(-) delete mode 100644 .github/workflows/coverage.yaml create mode 100644 .github/workflows/test-coverage.yaml diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 9c3a142..d8aeb54 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -1,22 +1,19 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +# +# NOTE: This workflow is overkill for most R packages and +# check-standard.yaml is likely a better choice. +# usethis::use_github_action("check-standard") will install it. on: push: - branches: - - main - - master - - dev + branches: [main, master] pull_request: - branches: - - main - - master - - dev - schedule: - - cron: '0 8 * * 0' + branches: [main, master] name: R-CMD-check jobs: R-CMD-check: - if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ${{ matrix.config.os }} name: ${{ matrix.config.os }} (${{ matrix.config.r }}) @@ -25,89 +22,42 @@ jobs: fail-fast: false matrix: config: - - {os: macOS-latest, r: 'release'} + - {os: macos-latest, r: 'release'} + - {os: windows-latest, r: 'release'} - - {os: ubuntu-latest, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - {os: ubuntu-latest, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - {os: ubuntu-latest, r: 'oldrel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - {os: ubuntu-latest, r: '3.6', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - {os: ubuntu-latest, r: '3.5', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} - - {os: ubuntu-latest, r: '3.4', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"} + # Use 3.6 to trigger usage of RTools35 + - {os: windows-latest, r: '3.6'} + # use 4.1 to check with rtools40's older compiler + - {os: windows-latest, r: '4.1'} + + - {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'} + - {os: ubuntu-latest, r: 'release'} + - {os: ubuntu-latest, r: 'oldrel-1'} + - {os: ubuntu-latest, r: 'oldrel-2'} + - {os: ubuntu-latest, r: 'oldrel-3'} + - {os: ubuntu-latest, r: 'oldrel-4'} env: - R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - RSPM: ${{ matrix.config.rspm }} GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes steps: - - uses: actions/checkout@v2 - - - uses: r-lib/actions/setup-r@master - with: - r-version: ${{ matrix.config.r }} - - - uses: r-lib/actions/setup-pandoc@master + - uses: actions/checkout@v4 - - name: Query dependencies - run: | - install.packages('remotes') - saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) - writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") - shell: Rscript {0} + - uses: r-lib/actions/setup-pandoc@v2 - - name: Cache R packages - if: runner.os != 'Windows' - uses: actions/cache@v2 + - uses: r-lib/actions/setup-r@v2 with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - - - name: Install system dependencies - if: runner.os == 'Linux' - run: | - while read -r cmd - do - eval sudo $cmd - done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))') - - - name: Install dependencies - run: | - remotes::install_deps(dependencies = TRUE) - remotes::install_cran("rcmdcheck") - shell: Rscript {0} - - - name: Session info - run: | - options(width = 100) - pkgs <- installed.packages()[, "Package"] - sessioninfo::session_info(pkgs, include_base = TRUE) - shell: Rscript {0} - - - name: Check - env: - _R_CHECK_CRAN_INCOMING_REMOTE_: false - run: rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check") - shell: Rscript {0} - - - name: Show testthat output - if: always() - run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true - shell: bash + r-version: ${{ matrix.config.r }} + http-user-agent: ${{ matrix.config.http-user-agent }} + use-public-rspm: true - - name: Upload check results - if: failure() - uses: actions/upload-artifact@master + - uses: r-lib/actions/setup-r-dependencies@v2 with: - name: ${{ runner.os }}-r${{ matrix.config.r }}-results - path: check + extra-packages: any::rcmdcheck + needs: check - - name: action-slack - if: failure() - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - uses: 8398a7/action-slack@v3.0.0 + - uses: r-lib/actions/check-r-package@v2 with: - status: ${{ job.status }} - author_name: "github action: ${{github.workflow}}" - fields: repo, ref, commit, author, message + upload-snapshots: true + build_args: 'c("--no-manual","--compact-vignettes=gs+qpdf")' diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml deleted file mode 100644 index b477c65..0000000 --- a/.github/workflows/coverage.yaml +++ /dev/null @@ -1,49 +0,0 @@ -on: - push: - branches: - - main - - master - pull_request: - branches: - - main - - master - -name: coverage - -jobs: - coverage: - if: "!contains(github.event.head_commit.message, 'skip ci')" - runs-on: macOS-latest - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v2 - - - uses: r-lib/actions/setup-r@master - - - uses: r-lib/actions/setup-pandoc@master - - - name: Query dependencies - run: | - install.packages('remotes') - saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) - writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") - shell: Rscript {0} - - - name: Cache R packages - uses: actions/cache@v2 - with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- - - - name: Install dependencies - run: | - install.packages(c("remotes")) - remotes::install_deps(dependencies = TRUE) - remotes::install_cran("covr") - shell: Rscript {0} - - - name: Test coverage - run: covr::codecov() - shell: Rscript {0} diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index a539056..a7276e8 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -1,59 +1,48 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help on: push: - branches: - - main - - master + branches: [main, master] + pull_request: + branches: [main, master] + release: + types: [published] + workflow_dispatch: name: pkgdown jobs: pkgdown: - if: "!contains(github.event.head_commit.message, 'skip ci')" - runs-on: macOS-latest + runs-on: ubuntu-latest + # Only restrict concurrency for non-PR jobs + concurrency: + group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - uses: r-lib/actions/setup-r@master + - uses: r-lib/actions/setup-pandoc@v2 - - uses: r-lib/actions/setup-pandoc@master - - - name: Query dependencies - run: | - install.packages('remotes') - saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) - writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") - shell: Rscript {0} + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true - - name: Cache R packages - uses: actions/cache@v2 + - uses: r-lib/actions/setup-r-dependencies@v2 with: - path: ${{ env.R_LIBS_USER }} - key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} - restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + extra-packages: any::pkgdown, local::. + needs: website - - name: Install dependencies - run: | - remotes::install_deps(dependencies = TRUE) - remotes::install_dev("pkgdown") + - name: Build site + run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) shell: Rscript {0} - - name: Install package - run: R CMD INSTALL . - - - name: Deploy package - run: | - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - Rscript -e 'pkgdown::deploy_to_branch(new_process = FALSE)' - - - name: action-slack - if: failure() - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - uses: 8398a7/action-slack@v3.0.0 + - name: Deploy to GitHub pages 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4.5.0 with: - status: ${{ job.status }} - author_name: "github action: pkgdown" - fields: repo, workflow, commit, message, author, action + clean: false + branch: gh-pages + folder: docs diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml new file mode 100644 index 0000000..21b8a93 --- /dev/null +++ b/.github/workflows/test-coverage.yaml @@ -0,0 +1,50 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +name: test-coverage + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::covr + needs: coverage + + - name: Test coverage + run: | + covr::codecov( + quiet = FALSE, + clean = FALSE, + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") + ) + shell: Rscript {0} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package diff --git a/README.Rmd b/README.Rmd index 29f7bdd..c7512b5 100644 --- a/README.Rmd +++ b/README.Rmd @@ -17,13 +17,11 @@ knitr::opts_chunk$set( [![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) -[![R build status](https://github.com/poissonconsulting/fishbc/workflows/R-CMD-check/badge.svg)](https://github.com/poissonconsulting/fishbc/actions) +[![R-CMD-check](https://github.com/poissonconsulting/fishbc/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/poissonconsulting/fishbc/actions/workflows/R-CMD-check.yaml) [![codecov](https://codecov.io/gh/poissonconsulting/fishbc/branch/master/graph/badge.svg?token=2EvrLVvDcZ)](https://codecov.io/gh/poissonconsulting/fishbc) [![License: CCBY4](https://img.shields.io/badge/License-CCBY4-green.svg)](https://creativecommons.org/licenses/by/4.0/) [![CRAN status](https://www.r-pkg.org/badges/version/fishbc)](https://CRAN.R-project.org/package=fishbc) ![CRAN downloads](https://cranlogs.r-pkg.org/badges/fishbc) - -[![R-CMD-check](https://github.com/poissonconsulting/fishbc/workflows/R-CMD-check/badge.svg)](https://github.com/poissonconsulting/fishbc/actions) ## Introduction diff --git a/README.md b/README.md index cf30a6a..375dcad 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,13 @@ [![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable) -[![R build -status](https://github.com/poissonconsulting/fishbc/workflows/R-CMD-check/badge.svg)](https://github.com/poissonconsulting/fishbc/actions) +[![R-CMD-check](https://github.com/poissonconsulting/fishbc/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/poissonconsulting/fishbc/actions/workflows/R-CMD-check.yaml) [![codecov](https://codecov.io/gh/poissonconsulting/fishbc/branch/master/graph/badge.svg?token=2EvrLVvDcZ)](https://codecov.io/gh/poissonconsulting/fishbc) [![License: CCBY4](https://img.shields.io/badge/License-CCBY4-green.svg)](https://creativecommons.org/licenses/by/4.0/) [![CRAN status](https://www.r-pkg.org/badges/version/fishbc)](https://CRAN.R-project.org/package=fishbc) ![CRAN downloads](https://cranlogs.r-pkg.org/badges/fishbc) - ## Introduction @@ -55,21 +53,22 @@ Get the curated freshwater fish of BC fish codes. ``` r library(tibble) # for tidy printing fishbc::freshwaterfish -#> # A tibble: 161 x 17 -#> Code CommonName Class Order Family Genus Species Subspecies Species2 Extant -#> -#> 1 AF All Fish TRUE -#> 2 SP Fish Unid… TRUE -#> 3 SG Sturgeon … Acti… Acip… Acipe… Acip… TRUE -#> 4 GSG Green Stu… Acti… Acip… Acipe… Acip… mediro… TRUE -#> 5 WSG White Stu… Acti… Acip… Acipe… Acip… transm… TRUE -#> 6 SH American … Acti… Clup… Clupe… Alosa sapidi… TRUE -#> 7 SU Sucker (G… Acti… Cypr… Catos… TRUE -#> 8 LSU Longnose … Acti… Cypr… Catos… Cato… catost… TRUE -#> 9 BSU Bridgelip… Acti… Cypr… Catos… Cato… columb… TRUE -#> 10 WSU White Suc… Acti… Cypr… Catos… Cato… commer… TRUE -#> # … with 151 more rows, and 7 more variables: Native , Marine , -#> # Yellow , Blue , Red , CDCode , ABCode +#> # A tibble: 161 × 18 +#> Code CommonName Class Order Family Genus Species Subspecies Species2 Extant +#> +#> 1 AF All Fish TRUE +#> 2 SP Fish Unide… TRUE +#> 3 SG Sturgeon (… Acti… Acip… Acipe… Acip… TRUE +#> 4 GSG Green Stur… Acti… Acip… Acipe… Acip… mediro… TRUE +#> 5 WSG White Stur… Acti… Acip… Acipe… Acip… transm… TRUE +#> 6 SH American S… Acti… Clup… Clupe… Alosa sapidi… TRUE +#> 7 SU Sucker (Ge… Acti… Cypr… Catos… TRUE +#> 8 LSU Longnose S… Acti… Cypr… Catos… Cato… catost… TRUE +#> 9 BSU Bridgelip … Acti… Cypr… Catos… Cato… columb… TRUE +#> 10 WSU White Suck… Acti… Cypr… Catos… Cato… commer… TRUE +#> # ℹ 151 more rows +#> # ℹ 8 more variables: Native , Marine , Yellow , Blue , +#> # Red , CDCode , ABCode , Ktunaxa ``` Get the common names for fish codes.