R/PaleobiologyDBDescendantFinder.R

Defines functions PaleobiologyDBDescendantFinder

Documented in PaleobiologyDBDescendantFinder

#' Palaeobiology Database Descendant Finder
#'
#' @description
#'
#' Given a Paleobiology Database taxon number returns basic information on all descendants.
#'
#' @param taxon_nos The Paleobiology database taxon number.
#' @param taxon_names A taxon name to search for in the database (default left to NULL); overrides taxon_nos if used.
#' @param original Whether or not to return the original (TRUE) or resolved version (FALSE).
#' @param interval The beginning and ending geologic intervals if only wanting taxa from a specified time window (default is NULL).
#' @param extant What to do with extant taxa, one of: "only" (only return extant taxa), "exclude" (exclude extant taxa), or "include" (make no distinction, the default).
#' @param validonly Whether or not to only return valid taxa (TRUE) or all taxa (FALSE).
#' @param returnrank Whether or not to only return taxa of a specific rank (e.g., "3" for species, "5" for genera). See Paleobiology Database API for more infomation.
#' @param breaker Size of breaker to use if querying a large number of taxa (reduces load on database of individual queries; default is 100).
#'
#' @details
#'
#' Uses the Paleobiology Database (\code{paleobiodb.org}) API (Peters and McLennen 2016) to query a known taxon number (or name) and returns information on the validity, name, and rank of all its descendants. Intended for use in building dynamic taxonomic resolutions when building metatree matrices (see Lloyd et al. 2016).
#'
#' Note that if using the \code{interval} option these must be terms used by the Paleobiology Database. Generally this means (for example) using Early/Late, not Lower/Upper.
#'
#' @return
#'
#' A ten-column matrix detailing the original taxon number (if relevant), the valid (resolved) taxon number, the taxon name, the taxon rank (Paleobiology Database rank number), the taxon number of the parent of this taxon, the taxon validity (if relevant; returns NA if already valid), the accepted taxon number (if relevant), the accepted taxon name (if relevant) of all descendants found, the attribution of the original name as currently entered in the database, and whether ("1") or not ("0") the species is extant.
#'
#' @author
#'
#' Graeme T. Lloyd \email{graemetlloyd@@gmail.com}
#'
#' @references
#'
#' Lloyd, G. T., Bapst, D. W., Friedman, M. and Davis, K. E., 2016. Probabilistic divergence time estimation without branch lengths: dating the origins of dinosaurs, avian flight, and crown birds. \emph{Biology Letters}, \bold{12}, 20160609.
#'
#' Peters, S. E. and McClennen, M., 2016. The Paleobiology Database application programming interface. \emph{Paleobiology}, \bold{42}, 1-7.
#'
#' @examples
#'
#' # Taxon query for Loxommatinae (asking for species only):
#' PaleobiologyDBDescendantFinder("339413", returnrank = "3")
#'
#' @export PaleobiologyDBDescendantFinder
PaleobiologyDBDescendantFinder <- function(taxon_nos, taxon_names = NULL, original = TRUE, interval = NULL, extant = "include", validonly = TRUE, returnrank = NULL, breaker = 100) {
  
  # Dead code used to generate the matrix below (kept in case it needs to be updated in future):
  #GeologicIntervals <- matrix(NA, nrow = 0, ncol = 4, dimnames = list(c(), c("ID", "Name", "MaxMa", "MinMa"))); for(i in setdiff(1:1108, c(143, 742, 1080))) {x <- readLines(paste("https://paleobiodb.org/data1.2/intervals/single.json?id=", i, sep = "")); x <- strsplit(strsplit(x[grep("\\{\"oid", x)], split = "\\{|\\}")[[1]][2], split = ",")[[1]]; GeologicIntervals <- rbind(GeologicIntervals, c(i, gsub("\"", "", strsplit(x[grep("\"nam\"", x)], split = ":")[[1]][2]), gsub("\"", "", strsplit(x[grep("\"eag\"", x)], split = ":")[[1]][2]), gsub("\"", "", strsplit(x[grep("\"lag\"", x)], split = ":")[[1]][2])))}
  
  # Build full geologic interval table from Paleobiology database:
  GeologicIntervals <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 66.00000, 252.17000, 541.00000, 635.00000, 1650.00000, 1650.00000, 1650.00000, 1650.00000, 1650.00000, 1650.00000, 4600.00000, 2.58800, 66.00000, 145.00000, 201.30000, 252.17000, 298.90000, 358.90000, 419.20000, 443.40000, 485.40000, 541.00000, 635.00000, 723.00000, 23.03000, 66.00000, 323.20000, 358.90000, 458.40000, 470.00000, 485.40000, 0.01170, 2.58800, 5.33300, 23.03000, 33.90000, 56.00000, 66.00000, 100.50000, 145.00000, 163.50000, 174.10000, 201.30000, 237.00000, 247.20000, 252.17000, 259.00000, 298.90000, 303.70000, 307.00000, 315.20000, 323.20000, 330.90000, 346.70000, 358.90000, 382.70000, 393.30000, 419.20000, 423.00000, 427.40000, 433.40000, 443.40000, 449.50000, 460.90000, 466.00000, 466.00000, 478.60000, 485.40000, 501.00000, 513.00000, 530.00000, 580.00000, 635.00000, 1050.00000, 1350.00000, 1650.00000, 3850.00000, 3950.00000, 4150.00000, 4560.00000, 3.60000, 5.33300, 11.60800, 15.97000, 23.03000, 28.40000, 33.90000, 37.20000, 48.60000, 55.80000, 58.70000, 66.00000, 89.30000, 130.00000, 145.00000, 3.60000, 5.33300, 7.24600, 11.62000, 13.82000, 15.97000, 20.44000, 23.03000, 28.10000, 33.90000, 38.00000, 41.30000, 47.80000, 56.00000, 59.20000, 66.00000, 72.10000, 83.60000, 86.30000, 89.80000, 93.90000, 100.50000, 113.00000, 125.00000, 129.40000, 132.90000, 139.80000, 145.00000, 152.10000, 157.30000, 163.50000, 166.10000, 168.30000, 170.30000, 174.10000, 182.70000, 190.80000, 199.30000, 201.30000, 208.50000, 228.00000, 237.00000, 242.00000, 247.20000, 251.30000, 252.17000, 252.17000, 259.00000, 265.10000, 268.80000, 279.50000, 279.30000, 290.10000, 295.50000, 298.90000, 301.20000, 303.40000, 304.80000, 305.90000, 306.95000, 309.00000, 311.45000, 313.80000, 314.60000, 318.10000, 318.10000, 318.10000, 318.10000, 318.10000, 318.10000, 318.10000, 326.40000, 326.40000, 336.00000, 339.40000, 342.80000, 345.00000, 345.30000, 353.80000, 358.90000, 372.20000, 382.70000, 387.70000, 393.30000, 407.60000, 410.80000, 419.20000, 425.60000, 427.40000, 425.40000, 426.20000, 433.40000, 438.50000, 440.80000, 443.40000, 445.20000, 455.80000, 449.50000, 449.50000, 452.00000, 455.80000, 455.80000, 457.50000, 457.50000, 457.50000, 460.90000, 460.90000, 460.90000, 466.00000, 463.50000, 466.00000, 501.00000, 501.00000, 513.00000, 513.00000, 516.00000, 520.00000, 530.00000, 580.00000, 580.00000, 580.00000, 723.00000, 4.90000, 10.30000, 13.60000, 15.97000, 20.43000, 30.80000, 33.30000, 33.90000, 37.20000, 40.40000, 46.20000, 50.30000, 55.80000, 56.80000, 61.70000, 63.30000, 66.00000, 66.00000, 0.30000, 1.80000, 0.30000, 1.80000, 1.80000, 4.90000, 4.90000, 10.30000, 10.30000, 10.30000, 13.60000, 13.60000, 15.97000, 15.97000, 15.97000, 20.43000, 20.43000, 30.80000, 30.80000, 30.80000, 30.80000, 37.20000, 37.20000, 37.20000, 46.20000, 46.20000, 50.30000, 50.30000, 50.30000, 55.80000, 55.80000, 55.80000, 55.80000, 56.80000, 56.80000, 56.80000, 61.70000, 61.70000, 61.70000, 61.70000, 61.70000, 61.70000, 63.30000, 63.30000, 63.30000, 66.00000, 66.00000, 66.00000, 24.80000, 26.30000, 30.80000, 3.20000, 5.33300, 8.70000, 11.60800, 15.97000, 20.00000, 23.03000, 2.58800, 3.20000, 4.20000, 4.90000, 7.24600, 7.75000, 8.70000, 9.70000, 11.10000, 12.75000, 13.65000, 15.97000, 16.90000, 20.00000, 22.40000, 23.03000, 501.00000, 501.00000, 501.00000, 513.00000, 513.00000, 513.00000, 513.00000, 516.00000, 520.00000, 530.00000, 501.00000, 501.00000, 501.00000, 513.00000, 530.00000, 445.60000, 449.50000, 457.50000, 457.50000, 457.50000, 460.90000, 460.90000, 466.00000, 466.00000, 478.60000, 445.60000, 449.50000, 452.00000, 452.00000, 455.80000, 457.50000, 460.90000, 457.50000, 460.90000, 460.90000, 466.00000, 463.50000, 463.50000, 468.10000, 471.80000, 484.50000, 501.00000, 445.60000, 449.50000, 452.00000, 460.90000, 457.50000, 457.50000, 457.50000, 460.90000, 466.00000, 468.10000, 478.60000, 485.40000, 485.40000, 485.40000, 423.00000, 423.00000, 423.00000, 421.30000, 421.30000, 422.90000, 422.90000, 425.40000, 425.40000, 428.20000, 428.20000, 436.00000, 439.00000, 443.40000, 423.00000, 425.40000, 443.40000, 423.00000, 421.30000, 421.30000, 421.30000, 425.40000, 428.20000, 428.20000, 428.20000, 428.20000, 436.00000, 422.90000, 428.20000, 436.00000, 439.00000, 443.40000, 376.10000, 376.10000, 376.10000, 376.10000, 388.10000, 388.10000, 391.90000, 409.10000, 412.30000, 416.00000, 418.70000, 383.70000, 388.10000, 388.10000, 409.10000, 412.30000, 416.00000, 376.10000, 376.10000, 376.10000, 376.10000, 388.10000, 388.10000, 391.90000, 409.10000, 412.30000, 416.00000, 388.10000, 391.90000, 409.10000, 409.10000, 412.30000, 416.00000, 376.10000, 376.10000, 376.10000, 383.70000, 383.70000, 388.10000, 388.10000, 388.10000, 391.90000, 391.90000, 409.10000, 409.10000, 416.00000, 306.95000, 318.10000, 326.40000, 303.40000, 304.80000, 305.90000, 311.45000, 311.45000, 314.60000, 314.60000, 318.10000, 303.40000, 305.90000, 313.80000, 318.10000, 318.10000, 339.40000, 345.00000, 353.80000, 358.90000, 265.00000, 265.00000, 265.00000, 268.00000, 268.00000, 268.00000, 279.50000, 279.50000, 279.50000, 279.50000, 254.00000, 259.00000, 259.00000, 259.00000, 265.00000, 268.00000, 290.10000, 296.40000, 164.70000, 164.70000, 164.70000, 171.60000, 171.60000, 180.10000, 182.00000, 183.00000, 189.60000, 189.60000, 196.50000, 196.50000, 168.40000, 171.60000, 171.60000, 171.60000, 171.60000, 171.60000, 175.60000, 175.60000, 175.60000, 180.10000, 180.10000, 180.10000, 182.00000, 183.00000, 184.10000, 185.70000, 186.70000, 189.60000, 189.60000, 190.70000, 196.50000, 196.50000, 196.50000, 196.50000, 196.60000, 196.60000, 201.30000, 201.30000, 201.30000, 171.60000, 171.60000, 171.60000, 171.60000, 171.60000, 171.60000, 171.60000, 175.60000, 175.60000, 175.60000, 182.00000, 180.10000, 182.00000, 182.00000, 183.00000, 183.00000, 189.60000, 189.60000, 189.60000, 189.60000, 189.60000, 196.50000, 196.50000, 196.50000, 196.50000, 196.50000, 196.50000, 201.30000, 201.30000, 201.30000, 460.90000, 0.00000, 467.30000, 460.90000, 460.90000, 485.40000, 452.50000, 457.50000, 471.80000, 488.30000, 449.50000, 449.50000, 452.00000, 460.90000, 460.90000, 471.80000, 478.60000, 485.40000, 485.40000, 485.40000, 452.00000, 463.50000, 485.40000, 455.80000, 455.80000, 457.50000, 460.90000, 466.00000, 466.00000, 471.80000, 478.60000, 478.60000, 485.40000, 485.40000, 455.80000, 460.90000, 460.90000, 466.00000, 445.60000, 449.50000, 460.90000, 468.10000, 478.60000, 449.50000, 456.10000, 460.90000, 468.90000, 472.00000, 473.90000, 476.80000, 485.40000, 485.40000, 449.50000, 460.90000, 478.60000, 485.40000, 449.50000, 460.90000, 468.10000, 478.60000, 478.60000, 485.40000, 460.90000, 460.90000, 468.10000, 478.60000, 485.40000, 449.50000, 460.90000, 468.10000, 478.60000, 485.40000, 478.60000, 460.90000, 485.40000, 485.40000, 466.00000, 471.80000, 471.80000, 471.80000, 471.80000, 471.80000, 478.60000, 484.50000, 449.50000, 460.90000, 471.80000, 478.60000, 460.90000, 460.90000, 460.90000, 485.40000, 460.90000, 460.90000, 468.10000, 468.10000, 485.40000, 485.40000, 251.20000, 252.17000, 70.60000, 70.60000, 83.50000, 83.50000, 83.50000, 85.80000, 85.80000, 85.80000, 89.30000, 89.30000, 89.30000, 93.50000, 93.50000, 93.50000, 99.60000, 99.60000, 99.60000, 105.30000, 109.00000, 112.03000, 122.46000, 125.45000, 130.00000, 130.00000, 136.40000, 136.40000, 140.20000, 140.20000, 145.00000, 145.00000, 145.00000, 150.80000, 150.80000, 150.80000, 155.70000, 155.70000, 161.20000, 161.20000, 161.20000, 167.70000, 167.70000, 167.70000, 175.60000, 175.60000, 175.60000, 201.30000, 201.30000, 201.30000, 212.00000, 215.56000, 221.50000, 232.00000, 235.00000, 242.00000, 242.00000, 247.20000, 247.20000, 247.20000, 247.20000, 251.30000, 252.17000, 254.17000, 259.90000, 272.30000, 0.78100, 1.20000, 3.00000, 4.00000, 6.80000, 9.00000, 10.00000, 11.80000, 13.80000, 15.50000, 16.30000, 17.50000, 21.00000, 29.00000, 36.00000, 42.00000, 48.00000, 55.80000, 57.00000, 59.00000, 62.50000, 66.00000, 1.80600, 2.58800, 61.60000, 70.60000, 70.60000, 83.50000, 83.50000, 541.00000, 516.00000, 516.00000, 541.00000, 2500.00000, 4000.00000, 1000.00000, 1600.00000, 2500.00000, 2800.00000, 3200.00000, 3600.00000, 4000.00000, 635.00000, 850.00000, 1000.00000, 1200.00000, 1400.00000, 1600.00000, 1800.00000, 2050.00000, 2300.00000, 2500.00000, 259.90000, 272.30000, 298.90000, 306.95000, 314.60000, 318.10000, 326.40000, 345.30000, 358.90000, 497.00000, 513.00000, 541.00000, 61.70000, 423.00000, 430.50000, 455.80000, 460.90000, 471.80000, 478.60000, 485.40000, 498.50000, 498.50000, 501.00000, 501.00000, 501.00000, 501.00000, 505.00000, 513.00000, 541.00000, 485.40000, 494.00000, 498.50000, 501.00000, 501.00000, 504.00000, 505.00000, 507.00000, 513.00000, 516.00000, 498.50000, 501.00000, 501.00000, 505.00000, 513.00000, 516.00000, 516.00000, 541.00000, 541.00000, 501.00000, 513.00000, 541.00000, 498.50000, 501.00000, 513.00000, 513.00000, 516.00000, 530.00000, 485.40000, 498.50000, 498.50000, 501.00000, 505.00000, 505.00000, 513.00000, 501.00000, 513.00000, 520.00000, 541.00000, 423.00000, 423.00000, 421.30000, 422.90000, 426.20000, 428.20000, 428.20000, 439.00000, 443.40000, 443.40000, 298.90000, 298.90000, 301.20000, 259.00000, 265.00000, 268.00000, 272.50000, 272.50000, 279.50000, 279.50000, 279.50000, 290.10000, 290.10000, 290.10000, 293.00000, 295.00000, 296.40000, 297.45000, 298.90000, 300.20000, 302.20000, 303.40000, 309.00000, 314.60000, 318.10000, 318.10000, 318.10000, 318.10000, 326.40000, 326.40000, 326.40000, 326.40000, 336.00000, 339.40000, 342.80000, 342.80000, 345.00000, 345.30000, 353.80000, 353.80000, 358.90000, 358.90000, 358.90000, 358.90000, 358.90000, 296.40000, 298.90000, 306.95000, 314.60000, 318.10000, 318.10000, 326.40000, 339.40000, 345.30000, 358.90000, 268.00000, 272.50000, 265.00000, 268.00000, 272.50000, 279.50000, 290.10000, 295.00000, 298.90000, 254.00000, 259.00000, 265.00000, 272.50000, 265.00000, 272.50000, 279.50000, 295.00000, 298.90000, 0.12600, 0.78100, 2.58800, 5.33300, 10.92000, 15.90000, 21.70000, 34.30000, 43.00000, 66.00000, 86.50000, 95.20000, 108.40000, 145.00000, 148.50000, 175.60000, 201.30000, 227.50000, 252.17000, 259.00000, 290.10000, 0.34000, 1.63000, 2.40000, 3.00000, 3.60000, 5.33300, 6.50000, 11.60800, 12.70000, 13.65000, 15.90000, 19.00000, 21.70000, 25.20000, 27.30000, 34.30000, 36.00000, 37.20000, 43.00000, 46.20000, 49.50000, 53.00000, 55.80000, 66.00000, 83.50000, 85.80000, 89.30000, 92.10000, 95.20000, 99.60000, 103.30000, 108.40000, 125.45000, 148.50000, 153.50000, 161.20000, 175.60000, 189.60000, 201.30000, 205.60000, 212.00000, 221.50000, 227.50000, 238.50000, 244.50000, 251.30000, 252.17000, 253.00000, 253.00000, 259.00000, 265.00000, 273.00000, 280.00000, 290.10000, 28.40000, 33.90000, 33.90000, 37.20000, 37.20000, 37.20000, 48.60000, 48.60000, 48.60000, 55.80000, 58.70000, 453.00000, 458.40000, 477.70000, 445.60000, 28.40000, 28.40000, 28.40000, 28.40000, 28.40000, 33.90000, 33.90000, 33.90000, 33.90000, 33.90000, 37.20000, 37.20000, 37.20000, 37.20000, 37.20000, 40.40000, 48.60000, 48.60000, 48.60000, 48.60000, 48.60000, 55.80000, 55.80000, 55.80000, 58.70000, 66.00000, 2.58800, 4.90000, 11.10000, 13.65000, 16.90000, 23.03000, 11.60800, 12.70000, 13.65000, 272.50000, 251.30000, 252.17000, 242.00000, 247.20000, 252.17000, 251.30000, 252.17000, 252.17000, 252.17000, 252.17000, 265.00000, 259.00000, 265.00000, 265.00000, 268.00000, 268.00000, 272.50000, 272.50000, 279.50000, 279.50000, 364.70000, 370.60000, 376.10000, 379.50000, 382.40000, 383.70000, 402.50000, 409.10000, 388.10000, 388.10000, 388.10000, 470.00000, 635.00000, 513.00000, 516.00000, 541.00000, 498.50000, 501.00000, 500.50000, 0.12600, 0.78100, 443.40000, 422.90000, 428.20000, 439.00000, 443.40000, 422.90000, 426.20000, 436.00000, 436.00000, 439.00000, 443.40000, 205.60000, 205.60000, 205.60000, 205.60000, 253.50000, 254.00000, 258.10000, 259.00000, 0.00000, 66.00000, 252.17000, 541.00000, 635.00000, 1650.00000, 1650.00000, 1650.00000, 1650.00000, 1650.00000, 4000.00000, 0.00000, 2.58800, 66.00000, 145.00000, 201.30000, 252.17000, 298.90000, 358.90000, 419.20000, 443.40000, 485.40000, 541.00000, 663.00000, 2.58800, 23.03000, 298.90000, 323.20000, 443.40000, 458.40000, 470.00000, 0.00000, 0.01170, 2.58800, 5.33300, 23.03000, 33.90000, 56.00000, 66.00000, 100.50000, 145.00000, 163.50000, 174.10000, 201.30000, 237.00000, 247.20000, 252.30000, 254.00000, 298.90000, 303.70000, 307.00000, 315.20000, 323.20000, 330.90000, 346.70000, 358.90000, 382.70000, 393.30000, 419.20000, 423.00000, 427.40000, 433.40000, 443.70000, 449.50000, 449.50000, 460.90000, 466.00000, 477.70000, 485.40000, 501.00000, 513.00000, 541.00000, 580.00000, 635.00000, 1050.00000, 1350.00000, 1650.00000, 3850.00000, 3950.00000, 4150.00000, 2.58800, 3.60000, 5.33300, 11.60800, 15.97000, 23.03000, 28.40000, 33.90000, 37.20000, 48.60000, 55.80000, 61.70000, 66.00000, 89.30000, 130.00000, 2.58800, 3.60000, 5.33300, 7.24600, 11.62000, 13.82000, 15.97000, 20.44000, 23.03000, 28.10000, 33.90000, 38.00000, 41.30000, 47.80000, 56.00000, 61.60000, 66.00000, 72.10000, 83.60000, 86.30000, 89.80000, 93.90000, 100.50000, 113.00000, 125.00000, 129.40000, 132.90000, 139.80000, 145.00000, 152.10000, 157.30000, 163.50000, 166.10000, 168.30000, 170.30000, 174.10000, 182.70000, 190.80000, 199.30000, 201.30000, 208.50000, 228.00000, 237.00000, 242.00000, 247.20000, 247.20000, 251.30000, 254.00000, 259.90000, 265.10000, 272.50000, 272.30000, 279.30000, 290.10000, 295.50000, 300.20000, 301.20000, 303.40000, 304.80000, 305.90000, 306.95000, 309.00000, 311.45000, 313.80000, 314.60000, 314.60000, 314.60000, 314.60000, 314.60000, 314.60000, 314.60000, 318.10000, 318.10000, 326.40000, 336.00000, 339.40000, 342.80000, 345.00000, 345.30000, 353.80000, 358.90000, 372.20000, 382.70000, 387.70000, 393.30000, 407.60000, 410.80000, 423.00000, 425.60000, 422.90000, 425.40000, 430.50000, 433.40000, 438.50000, 440.80000, 443.40000, 445.60000, 445.60000, 445.60000, 449.50000, 452.00000, 452.00000, 455.80000, 455.80000, 455.80000, 457.50000, 449.50000, 449.50000, 460.90000, 460.90000, 463.50000, 485.40000, 485.40000, 501.00000, 501.00000, 513.00000, 516.00000, 520.00000, 541.00000, 580.00000, 580.00000, 635.00000, 1.80000, 4.90000, 10.30000, 13.60000, 15.97000, 20.43000, 30.80000, 33.30000, 33.90000, 37.20000, 40.40000, 46.20000, 50.30000, 55.80000, 56.80000, 61.70000, 61.70000, 63.30000, 0.01200, 0.30000, 0.01200, 0.30000, 0.30000, 1.80000, 1.80000, 4.90000, 4.90000, 4.90000, 10.30000, 10.30000, 13.60000, 13.60000, 13.60000, 15.97000, 15.97000, 20.43000, 20.43000, 20.43000, 20.43000, 33.90000, 33.90000, 33.90000, 40.40000, 40.40000, 46.20000, 46.20000, 46.20000, 50.30000, 50.30000, 50.30000, 50.30000, 55.80000, 55.80000, 55.80000, 56.80000, 56.80000, 56.80000, 56.80000, 56.80000, 56.80000, 61.70000, 61.70000, 61.70000, 63.30000, 63.30000, 63.30000, 20.43000, 24.80000, 26.30000, 2.58800, 3.20000, 5.33300, 8.70000, 11.60800, 15.97000, 20.00000, 1.80600, 2.58800, 3.20000, 4.20000, 4.90000, 7.24600, 7.75000, 8.70000, 9.70000, 11.10000, 12.75000, 13.65000, 15.97000, 16.90000, 20.00000, 22.40000, 485.40000, 485.40000, 485.40000, 501.00000, 501.00000, 501.00000, 501.00000, 513.00000, 516.00000, 516.00000, 485.40000, 485.40000, 485.40000, 501.00000, 513.00000, 443.70000, 445.60000, 445.60000, 455.80000, 455.80000, 455.80000, 457.50000, 460.90000, 466.00000, 466.00000, 443.70000, 445.60000, 445.60000, 449.50000, 452.00000, 452.00000, 455.80000, 449.50000, 455.80000, 449.50000, 460.90000, 460.90000, 460.90000, 463.50000, 468.10000, 471.80000, 484.50000, 443.70000, 445.60000, 445.60000, 449.50000, 454.00000, 455.80000, 455.80000, 457.50000, 457.50000, 460.90000, 468.10000, 468.10000, 478.60000, 477.70000, 419.20000, 419.20000, 419.20000, 419.20000, 419.20000, 421.30000, 421.30000, 422.90000, 422.90000, 422.90000, 426.20000, 428.20000, 428.20000, 439.00000, 419.20000, 419.20000, 422.90000, 419.20000, 419.20000, 419.20000, 419.20000, 419.20000, 422.90000, 426.20000, 426.20000, 426.20000, 428.20000, 419.20000, 422.90000, 426.20000, 428.20000, 436.00000, 353.80000, 360.70000, 360.70000, 360.70000, 376.10000, 383.70000, 388.10000, 388.10000, 391.90000, 412.30000, 412.30000, 360.70000, 376.10000, 383.70000, 383.70000, 391.90000, 412.30000, 360.70000, 360.70000, 360.70000, 360.70000, 376.10000, 383.70000, 388.10000, 391.90000, 409.10000, 412.30000, 383.70000, 388.10000, 388.10000, 391.90000, 391.90000, 409.10000, 360.70000, 360.70000, 360.70000, 376.10000, 376.10000, 376.10000, 383.70000, 383.70000, 383.70000, 388.10000, 391.90000, 391.90000, 391.90000, 298.90000, 306.95000, 314.60000, 301.20000, 303.40000, 304.80000, 305.90000, 306.95000, 311.45000, 314.60000, 314.60000, 298.90000, 303.40000, 305.90000, 311.45000, 314.60000, 318.10000, 336.00000, 342.80000, 353.80000, 252.30000, 259.00000, 259.00000, 265.00000, 265.00000, 265.00000, 272.50000, 272.50000, 272.50000, 272.50000, 252.30000, 254.00000, 254.00000, 254.00000, 259.00000, 265.00000, 268.00000, 268.00000, 161.20000, 161.20000, 161.20000, 167.70000, 168.40000, 175.60000, 175.60000, 182.00000, 183.00000, 183.00000, 189.60000, 189.60000, 167.70000, 168.40000, 168.40000, 168.40000, 168.40000, 168.40000, 171.60000, 171.60000, 171.60000, 175.60000, 175.60000, 175.60000, 180.10000, 182.00000, 183.00000, 184.10000, 185.70000, 186.70000, 186.70000, 186.70000, 190.70000, 190.70000, 189.60000, 190.70000, 190.70000, 196.50000, 196.60000, 196.60000, 196.50000, 167.70000, 167.70000, 167.70000, 168.40000, 167.70000, 167.70000, 167.70000, 171.60000, 171.60000, 171.60000, 175.60000, 175.60000, 175.60000, 175.60000, 182.00000, 182.00000, 183.00000, 183.00000, 183.00000, 183.00000, 183.00000, 189.60000, 189.60000, 189.60000, 189.60000, 189.60000, 189.60000, 196.50000, 196.50000, 196.50000, 449.50000, 0.00000, 458.40000, 449.50000, 449.50000, 477.70000, 443.70000, 452.50000, 457.50000, 471.80000, 443.70000, 443.70000, 449.50000, 449.50000, 449.50000, 468.10000, 471.80000, 471.80000, 478.60000, 478.60000, 443.70000, 452.00000, 463.50000, 449.50000, 452.00000, 455.80000, 457.50000, 460.90000, 460.90000, 466.00000, 471.80000, 471.80000, 478.60000, 478.60000, 452.00000, 457.50000, 457.50000, 460.90000, 443.70000, 445.60000, 449.50000, 460.90000, 468.10000, 443.70000, 449.50000, 456.10000, 466.00000, 468.90000, 472.00000, 473.90000, 476.80000, 478.60000, 443.70000, 443.70000, 460.90000, 478.60000, 443.70000, 443.70000, 460.90000, 468.10000, 468.10000, 478.60000, 443.70000, 449.50000, 460.90000, 468.10000, 468.10000, 443.70000, 449.50000, 460.90000, 468.10000, 478.60000, 468.10000, 449.50000, 484.50000, 484.50000, 460.90000, 466.00000, 466.00000, 468.10000, 468.10000, 468.10000, 471.80000, 471.80000, 443.70000, 449.50000, 468.10000, 471.80000, 449.50000, 449.50000, 449.50000, 468.10000, 449.50000, 449.50000, 460.90000, 460.90000, 468.10000, 478.60000, 247.20000, 251.20000, 66.00000, 66.00000, 70.60000, 70.60000, 70.60000, 83.50000, 83.50000, 83.50000, 85.80000, 85.80000, 85.80000, 89.30000, 89.30000, 89.30000, 93.50000, 93.50000, 93.50000, 99.60000, 105.30000, 109.00000, 112.03000, 122.46000, 125.45000, 125.45000, 130.00000, 130.00000, 136.40000, 136.40000, 140.20000, 140.20000, 140.20000, 145.00000, 145.00000, 145.00000, 150.80000, 150.80000, 155.70000, 155.70000, 155.70000, 164.70000, 164.70000, 164.70000, 171.60000, 171.60000, 171.60000, 196.50000, 196.50000, 196.50000, 205.60000, 212.00000, 215.56000, 221.50000, 232.00000, 235.00000, 235.00000, 242.00000, 242.00000, 242.00000, 242.00000, 247.20000, 251.30000, 252.17000, 254.17000, 268.80000, 0.01200, 0.78100, 1.20000, 3.00000, 4.00000, 6.80000, 9.00000, 10.00000, 11.80000, 13.80000, 15.50000, 16.30000, 17.50000, 21.00000, 29.00000, 36.00000, 42.00000, 48.00000, 55.80000, 57.00000, 59.00000, 62.50000, 0.78100, 1.80600, 59.20000, 66.00000, 66.00000, 70.60000, 70.60000, 530.00000, 513.00000, 513.00000, 0.00000, 541.00000, 2500.00000, 541.00000, 1000.00000, 1600.00000, 2500.00000, 2800.00000, 3200.00000, 3600.00000, 541.00000, 635.00000, 850.00000, 1000.00000, 1200.00000, 1400.00000, 1600.00000, 1800.00000, 2050.00000, 2300.00000, 252.17000, 259.90000, 272.30000, 298.90000, 306.95000, 314.60000, 318.10000, 326.40000, 345.30000, 485.40000, 501.00000, 513.00000, 58.70000, 419.20000, 427.40000, 445.60000, 455.80000, 468.10000, 471.80000, 485.00000, 485.40000, 485.40000, 498.50000, 498.50000, 485.40000, 498.50000, 501.00000, 505.00000, 530.00000, 485.00000, 485.40000, 494.00000, 498.50000, 498.50000, 501.00000, 504.00000, 505.00000, 507.00000, 513.00000, 485.40000, 498.50000, 498.50000, 501.00000, 505.00000, 513.00000, 513.00000, 516.00000, 516.00000, 485.40000, 498.50000, 520.00000, 485.40000, 485.40000, 498.50000, 505.00000, 513.00000, 516.00000, 478.60000, 485.40000, 485.40000, 485.40000, 498.50000, 501.00000, 505.00000, 485.40000, 501.00000, 513.00000, 516.00000, 419.20000, 419.20000, 419.20000, 419.20000, 422.90000, 422.90000, 426.20000, 428.20000, 436.00000, 439.00000, 295.00000, 295.00000, 298.90000, 252.30000, 254.00000, 265.00000, 268.00000, 268.00000, 272.50000, 272.50000, 272.50000, 279.50000, 279.50000, 279.50000, 290.10000, 293.00000, 295.00000, 296.40000, 297.45000, 298.90000, 301.20000, 302.20000, 305.90000, 311.45000, 314.60000, 314.60000, 314.60000, 314.60000, 314.60000, 318.10000, 318.10000, 318.10000, 326.40000, 336.00000, 339.40000, 339.40000, 342.80000, 345.00000, 345.00000, 345.30000, 353.80000, 353.80000, 353.80000, 353.80000, 353.80000, 295.00000, 295.00000, 298.90000, 303.40000, 314.60000, 314.60000, 318.10000, 326.40000, 339.40000, 345.30000, 252.30000, 268.00000, 252.30000, 265.00000, 268.00000, 272.50000, 272.50000, 290.10000, 295.00000, 252.30000, 254.00000, 254.00000, 265.00000, 259.00000, 265.00000, 272.50000, 279.50000, 290.10000, 0.01170, 0.12600, 0.78100, 0.00000, 5.33300, 10.92000, 15.90000, 21.70000, 34.30000, 43.00000, 66.00000, 86.50000, 95.20000, 108.40000, 145.00000, 148.50000, 175.60000, 201.60000, 227.50000, 251.30000, 259.00000, 0.00000, 0.34000, 1.63000, 2.40000, 3.00000, 3.60000, 5.33300, 6.50000, 11.60800, 12.70000, 13.65000, 15.90000, 19.00000, 21.70000, 25.20000, 27.30000, 34.30000, 36.00000, 37.20000, 43.00000, 46.20000, 49.50000, 53.00000, 55.80000, 66.00000, 83.50000, 85.80000, 89.30000, 92.10000, 95.20000, 99.60000, 103.30000, 108.40000, 145.00000, 148.50000, 153.50000, 161.20000, 175.60000, 189.60000, 201.60000, 205.60000, 212.00000, 221.50000, 227.50000, 238.50000, 244.50000, 247.20000, 252.17000, 252.30000, 253.00000, 259.00000, 265.00000, 273.00000, 280.00000, 23.03000, 23.03000, 28.40000, 33.90000, 33.90000, 33.90000, 37.20000, 37.20000, 37.20000, 48.60000, 55.80000, 445.20000, 453.00000, 470.00000, 443.70000, 23.03000, 23.03000, 23.03000, 23.03000, 23.03000, 23.03000, 28.40000, 28.40000, 28.40000, 28.40000, 33.90000, 33.90000, 33.90000, 33.90000, 33.90000, 37.20000, 40.40000, 40.40000, 40.40000, 40.40000, 40.40000, 48.60000, 48.60000, 48.60000, 55.80000, 55.80000, 0.01200, 2.58800, 4.90000, 11.10000, 13.65000, 16.90000, 7.24600, 11.60800, 12.70000, 268.00000, 247.20000, 247.20000, 235.00000, 235.00000, 247.20000, 247.20000, 247.20000, 247.20000, 247.20000, 247.20000, 252.30000, 252.30000, 254.00000, 252.30000, 265.00000, 265.00000, 268.00000, 268.00000, 272.50000, 272.50000, 360.70000, 364.70000, 370.60000, 376.10000, 379.50000, 382.40000, 391.90000, 402.50000, 383.70000, 383.70000, 383.70000, 467.30000, 580.00000, 501.00000, 513.00000, 516.00000, 485.40000, 498.50000, 497.00000, 0.01200, 0.12600, 422.90000, 419.20000, 422.90000, 426.20000, 436.00000, 419.20000, 422.90000, 426.20000, 428.20000, 428.20000, 436.00000, 201.60000, 201.60000, 201.60000, 201.60000, 252.30000, 253.50000, 254.00000, 258.10000), ncol = 3, dimnames = list(c("Cenozoic", "Mesozoic", "Paleozoic", "Sinian", "Riphean", "Animikean", "Huronian", "Randian", "Swazian", "Isuan", "Hadean", "Quaternary", "Tertiary", "Cretaceous", "Jurassic", "Triassic", "Permian", "Carboniferous", "Devonian", "Silurian", "Ordovician", "Cambrian", "Vendian", "Sturtian", "Neogene", "Paleogene", "Pennsylvanian", "Mississippian", "Late Ordovician", "Middle Ordovician", "Early Ordovician", "Holocene", "Pleistocene", "Pliocene", "Miocene", "Oligocene", "Eocene", "Paleocene", "Late Cretaceous", "Early Cretaceous", "Late Jurassic", "Middle Jurassic", "Early Jurassic", "Late Triassic", "Middle Triassic", "Early Triassic", "Zechstein", "Rotliegendes", "Gzhelian", "Kasimovian", "Moscovian", "Bashkirian", "Serpukhovian", "Visean", "Tournaisian", "Late Devonian", "Middle Devonian", "Early Devonian", "Pridoli", "Ludlow", "Wenlock", "Llandovery", "Ashgill", "Caradoc", "Llandeilo", "Llanvirn", "Arenig", "Tremadoc", "Merioneth", "St Davids", "Caerfai", "Ediacara", "Varanger", "Karatau", "Yurmatin", "Burzyan", "Early Imbrian", "Nectarian", "Basin Groups 1-9", "Cryptic", "Late Pliocene", "Early Pliocene", "Late Miocene", "Middle Miocene", "Early Miocene", "Late Oligocene", "Early Oligocene", "Late Eocene", "Middle Eocene", "Early Eocene", "Late Paleocene", "Early Paleocene", "Senonian", "Gallic", "Neocomian", "Piacenzian", "Zanclean", "Messinian", "Tortonian", "Serravallian", "Langhian", "Burdigalian", "Aquitanian", "Chattian", "Rupelian", "Priabonian", "Bartonian", "Lutetian", "Ypresian", "Thanetian", "Danian", "Maastrichtian", "Campanian", "Santonian", "Coniacian", "Turonian", "Cenomanian", "Albian", "Aptian", "Barremian", "Hauterivian", "Valanginian", "Berriasian", "Tithonian", "Kimmeridgian", "Oxfordian", "Callovian", "Bathonian", "Bajocian", "Aalenian", "Toarcian", "Pliensbachian", "Sinemurian", "Hettangian", "Rhaetian", "Norian", "Carnian", "Ladinian", "Anisian", "Spathian", "Nammalian", "Griesbachian", "Longtanian", "Capitanian", "Wordian", "Ufimian", "Kungurian", "Artinskian", "Sakmarian", "Asselian", "Noginian", "Klazminskian", "Dorogovilovian", "Khamovnichean", "Krevyakian", "Myachkovian", "Podolskian", "Kashirian", "Vereian", "Melekesian", "Cheremshanian", "Yeadonian", "Marsdenian", "Kinderscoutian", "Alportian", "Chokierian", "Arnsbergian", "Pendleian", "Brigantian", "Asbian", "Holkerian", "Arundian", "Chadian", "Ivorian", "Hastarian", "Famennian", "Frasnian", "Givetian", "Eifelian", "Emsian", "Pragian", "Lochkovian", "Ludfordian", "Gorstian", "Gleedonian", "Whitwellian", "Sheinwoodian", "Telychian", "Aeronian", "Rhuddanian", "Hirnantian", "Rawtheyan", "Cautleyan", "Pusgillian", "Onnian", "Actonian", "Marshbrookian", "Longvillian", "Soudleyan", "Harnagian", "Costonian", "Late Llandeilo", "Middle Llandeilo", "Early Llandeilo", "Late Llanvirn", "Early Llanvirn", "Dolgellian", "Maentwrogian", "Menevian", "Solvan", "Lenian", "Atdabanian", "Tommotian", "Poundian", "Wonokan", "Mortensnes", "Smalfjord", "Blancan", "Hemphillian", "Clarendonian", "Barstovian", "Hemingfordian", "Arikareean", "Whitneyan", "Orellan", "Chadronian", "Duchesnean", "Uintan", "Bridgerian", "Wasatchian", "Clarkforkian", "Tiffanian", "Torrejonian", "Dragonian", "Puercan", "Rancholabrean", "Irvingtonian", "Sheridanian", "Cudahyan", "Sappan", "\\Senecan\\", "Rexroadian", "Late Hemphillian", "late Early Hemphillian", "early Early Hemphillian", "Late Clarendonian", "Early Clarendonian", "late Late Barstovian", "early Late Barstovian", "Early Barstovian", "Late Hemingfordian", "Early Hemingfordian", "late Late Arikareean", "early Late Arikareean", "late Early Arikareean", "early Early Arikareean", "Late Chadronian", "Middle Chadronian", "Early Chadronian", "Late Uintan", "Early Uintan", "Twinbuttean", "Blacksforkian", "Gardnerbuttian", "Lostcabinian", "Lysitean", "Graybullian", "Sandcouleean", "Cf3", "Cf2", "Cf1", "Ti6", "Ti5", "Ti4", "Ti3", "Ti2", "Ti1", "To3", "To2", "To1", "Pu3", "Pu2", "Pu1", "Harrisonian", "Monroecreekian", "Geringian", "Villanyian", "Ruscinian", "Turolian", "Vallesian", "Astaracian", "Orleanian", "Agenian", "MN 17", "MN 16", "MN 15", "MN 14", "MN 13", "MN 12", "MN 11", "MN 10", "MN 9", "MN 7 + 8", "MN 6", "MN 5", "MN 4", "MN 3", "MN 2", "MN 1", "Dolgelly", "Festiniogian", "Maentwrog", "Clogau", "Gamlan", "Barmouth", "Hafotty", "Rhinog", "Llanbedr", "Dolwen", "Trempealeauan", "Franconian", "Dresbachian", "Albertian", "Waucoban", "Kosov", "Kraluv Dvur", "Bohdalec", "Zahorany", "Vinice", "Letna", "Liben", "Dobrotiva", "Sarka", "Klabava", "Porkuni", "Pirgu", "Vormsi", "Nabala", "Rakvere", "Oandu", "Keila", "Johvi", "Idavere", "Kukruse", "Uhaku", "Lasnamagi", "Aseri", "Kunda", "Volkhov", "Latorp", "Olentian", "Gamach", "Richmond", "Maysville", "Edenian", "Sherman", "Kirkfield", "Rockland", "Black River", "Chazy", "Whiterock", "Cassinian", "Jefferson", "Deming", "Gasconadian", "Red Downtonian", "Temeside Shales", "Downton Castle", "Whitcliffe", "Leintwardine", "Bringewood", "Elton", "Wenlock (England)", "Tickwood", "Coalbrookdale", "Buildwas", "Woolhope", "Wych", "Cowleigh Park", "Pridolischichten", "Kopaninaschichten", "Litenschichten", "Sundre", "Hamra", "Burgsvik", "Eke", "Hemse", "Mulde", "Slite", "Hogklint", "Upper Visby", "Lower Visby", "Cayugan", "Lockportian", "Tonawandan", "Ontarian", "Alexandrian", "Pilton", "Baggy", "Upcott", "Pickwell Down", "Morte", "Ilfracombe", "Hangman", "Lynton", "Brecon", "Ditton", "Downton", "Famennien", "Frasnien", "Givetien", "Couvinien", "Coblencien", "Gedinnine", "Wocklum", "Dasberg", "Hemberg", "Nehden", "Adorf", "Givet", "Eifel", "Ems", "Siegen", "Gedinne", "Srbsko", "Chotec", "Daleje", "Zlichovian", "Pragian (Czechoslovakia)", "Lochkovian (Czechoslovakia)", "Conewangoan", "Conneaut", "Canadaway", "West Falls", "Sonyea", "Genesee", "Taghanic", "Tioughnioga", "Cazenovian", "Southwood", "Sawkill", "Deer Park", "Helderberg", "Stephanian", "Westphalian", "Namurian", "Stephanian C", "Stephanian B", "Stephanian A", "Cantabrian", "Westphalian D", "Westphalian C", "Westphalian B", "Westphalian A", "Virgilian", "Missourian", "Desmoinesian", "Atokan", "Morrowan", "Chesterian", "Meramecian", "Osagean", "Kinderhookian", "Buntsandstein", "Ohre", "Aller", "Leine", "Stassfurt Evaporites", "Hauptdolomitstinkschiefer", "Werra", "Zechsteinkalk", "Kupferschiefer", "Weissliegendes", "Dewey Lake", "Rustler", "Salado", "Castile", "Capitan", "Word", "Leonard", "Wolfcamp", "Late Callovian", "Middle Callovian", "Early Callovian", "Late Bajocian", "Early Bajocian", "Late Toarcian", "Middle Toarcian", "Early Toarcian", "Late Pliensbachian", "Early Pliensbachian", "Late Sinemurian", "Early Sinemurian", "Epizigzagiceras", "Rotundum", "Oblatum", "Kirschneri", "Crassicostatus", "Widebayense", "Howelli", "Scissum", "Westermanni", "Yakounensis", "Hillebrandti", "Crassicosta", "Planulata", "Kanense", "Carlottense", "Kunae", "Freboldi", "Whiteavesi", "Imlayi", "Tetraspidoceras", "Plesechioceras harbledownense", "Asteroceras varians", "Arnioceras arnouldi", "Coroniceras", "Canadensis", "Pseudaetomoceras", "Franziceras", "Euphyllites", "Psiloceras", "Parkinsoni", "Garantiana", "Subfurcatum", "Humphresianum", "Sauzei", "Laeviuscula", "Discites", "Concavum", "Murchisonae", "Opalinum", "Levesquei", "Thouarsense", "Variabilis", "Bifrons", "Falciferum", "Tenuicostatum", "Spinatum", "Margaritatus", "Davoei", "Ibex", "Jamesoni", "Raricostatum", "Oxynotum", "Obtusum", "Turneri", "Semicostatum", "Bucklandi", "Angulata", "Liasicus", "Planorbis", "Trentonian", "Porterfieldian", "Darriwilian", "Wildernessian", "Ashbyan", "Tremadocian", "Cincinnatian", "Mohawkian", "Whiterockian", "Ibexian", "Gamachian", "Richmondian", "Maysvillian", "Chatfieldian", "Turinian", "Rangerian", "Blackhillsian", "Tulean", "Stairsian", "Skullrockian", "Harju", "Viru", "Oeland", "Streffordian", "Cheneyan", "Burrellian", "Aurelucian", "Llandeilian", "Abereiddian", "Fennian", "Whitlandian", "Moridunian", "Migneintian", "Cressagian", "Woolstonian", "Volfreyan", "Dobrotivian", "Oretanian", "Kosovian", "Kralodvorian", "Berounian", "Llanvirnian", "Arenigian", "Bolindian", "Eastonian", "Gisbornian", "Yapeenian", "Castlemainian", "Chewtonian", "Bendigonian", "Lancefieldian", "Warendian", "Qiantianjiang", "Aijiashan", "Yangtzi", "Yichang", "Wufeng", "Xiaoxita", "Guniu", "Dawan", "Daobaowan", "Lianghekou", "Shikou", "Hanjiang", "Hulo", "Ningkuo", "Hunjiang", "Chientangkiangian", "Neichiashanian", "Zhejiangian", "Yushanian", "Ichangian", "Valhallan", "Haljala", "Varangu", "Pakerort", "Aluoja", "Valaste", "Hunderum", "Langevoja", "Vaana", "Saka", "Billingen", "Hunneberg", "Ashgillian", "Caradocian", "Volkhovian", "Latorpian", "Franklinian", "Kirkfieldian", "Rocklandian", "Canadian", "Shermanian", "Blackriveran", "Chazyan", "Marmor", "Jeffersonian", "Demingian", "Olenekian", "Induan", "Late Maastrichtian", "Early Maastrichtian", "Late Campanian", "Middle Campanian", "Early Campanian", "Late Santonian", "Middle Santonian", "Early Santonian", "Late Coniacian", "Middle Coniacian", "Early Coniacian", "Late Turonian", "Middle Turonian", "Early Turonian", "Late Cenomanian", "Middle Cenomanian", "Early Cenomanian", "Late Albian", "Middle Albian", "Early Albian", "Late Aptian", "Early Aptian", "Late Barremian", "Early Barremian", "Late Hauterivian", "Early Hauterivian", "Late Valanginian", "Early Valanginian", "Late Berriasian", "Middle Berriasian", "Early Berriasian", "Late Tithonian", "Middle Tithonian", "Early Tithonian", "Late Kimmeridgian", "Early Kimmeridgian", "Late Oxfordian", "Middle Oxfordian", "Early Oxfordian", "Late Bathonian", "Middle Bathonian", "Early Bathonian", "Late Aalenian", "Middle Aalenian", "Early Aalenian", "Late Hettangian", "Middle Hettangian", "Early Hettangian", "Sevatian", "Alaunian", "Lacian", "Tuvalian", "Julian", "Longobardian", "Fassanian", "Illyrian", "Pelsonian", "Bithynian", "Aegean", "Smithian", "Dienerian", "Changhsingian", "Wuchiapingian", "Roadian", "Lujanian", "Ensenadan", "Uquian", "Chapadmalalan", "Montehermosan", "Huayquerian", "Chasicoan", "Mayoan", "Laventan", "Colloncuran", "Friasian", "Santacrucian", "Colhuehuapian", "Deseadan", "Tinguirirican", "Divisaderan", "Mustersan", "Casamayoran", "Riochican", "Itaboraian", "Peligran", "Tiupampan", "Calabrian", "Gelasian", "Selandian", "Lancian", "Edmontonian", "Judithian", "Aquilan", "Manykaian", "Toyonian", "Botomian", "Phanerozoic", "Proterozoic", "Archean", "Neoproterozoic", "Mesoproterozoic", "Paleoproterozoic", "Neoarchean", "Mesoarchean", "Paleoarchean", "Eoarchean", "Ediacaran", "Cryogenian", "Tonian", "Stenian", "Ectasian", "Calymmian", "Statherian", "Orosirian", "Rhyacian", "Siderian", "Lopingian", "Guadalupian", "Cisuralian", "Late Pennsylvanian", "Middle Pennsylvanian", "Early Pennsylvanian", "Late Mississippian", "Middle Mississippian", "Early Mississippian", "Furongian", "Middle Cambrian", "Early Cambrian", "Middle Paleocene", "unnamed Pridoli stage", "Homerian", "middle Late Ordovician", "early Late Ordovician", "early Middle Ordovician", "late Early Ordovician", "Mansian", "Ketyan", "Yurakian", "Ensyan", "Maduan", "Tavgian", "Nganasanian", "Mayan", "Amgan", "Nemakit-Daldynian", "Datsonian", "Payntonian", "Iverian", "Idamean", "Mindyallan", "Boomerangian", "Undillan", "Floran", "Templetonian", "Ordian", "Taoyuanian", "Waergangian", "Youshuanian", "Wangcunian", "Taijangian", "Duyunian", "Nangaoian", "Meishucunian", "Jinnigian", "Millardan", "Lincolnian", "Begadean", "Sunwaptan", "Steptoean", "Marjumian", "Delamaran", "Dyeran", "Montezuman", "Ungurian", "Batyrbaian", "Aksayan", "Sakian", "Ayusokkanian", "Zhanarykian", "Tyesaian", "Merionethian", "Arcadian", "Branchian", "Placentian", "Ohesaare", "Kaugetuma", "Kuressaare", "Paadla", "Rootsikula", "Jaagarahu", "Jaani", "Adavere", "Raikkula", "Juuru", "Autunian", "Lebach", "Kuzel", "Vyatkian", "Severodvinian", "Urzhumian", "Povolzhian", "Sokian", "Irenian", "Filipovian", "Saranian", "Sarginian", "Irginian", "Burtsevian", "Sterlitamakian", "Tastubian", "Shikhanian", "Uskalykian", "Sjuranian", "Melekhovian", "Pavlovoposadian", "Rusavkian", "Peskovian", "Tsninian", "Prikarnian", "Severokeltmenian", "Krasnopolyanian", "Voznesenian", "Zapaltyubian", "Protvian", "Steshevian", "Tarussian", "Venevian", "Mikhailovian", "Aleksian", "Tulian", "Bobrikovian", "Radaevian", "Kosvinian", "Kizolovian", "Cherepetsian", "Karakubian", "Upinian", "Malevian", "Gumerovian", "Bursumian", "Mapingian", "Xiaodushanian", "Dalanian", "Huashibanian", "Luosuan", "Dewunian", "Shangsian", "Jiusian", "Tangbagouan", "Tatarian", "Kazanian", "Pamirian", "Murgabian", "Kubergandian", "Bolorian", "Yakhtashian", "Khoridzhian", "Sebisurkhian", "Chhidru", "Kalabagh", "Wargal", "Amb", "Lengwuan", "Kuhfengian", "Luodianian", "Longlinian", "Zisongian", "Late Pleistocene", "Middle Pleistocene", "Early Pleistocene", "Wanganui", "Taranaki", "Southland", "Pareora", "Landon", "Arnold", "Dannevirke", "Mata", "Raukumara", "Clarence", "Taitai", "Oteke", "Kawhia", "Herangi", "Balfour", "Gore", "DUrville", "Aparima", "Haweran", "Castlecliffian", "Nukumaruan", "Mangapanian", "Waipipian", "Opoitian", "Kapitean", "Tongaporutuan", "Waiauan", "Lillburnian", "Clifdenian", "Altonian", "Otaian", "Waitakian", "Duntroonian", "Whaingaroan", "Runangan", "Kaiatan", "Bortonian", "Porangan", "Heretaungan", "Mangaorapan", "Waipawan", "Teurian", "Haumurian", "Piripauan", "Teratan", "Mangaotanean", "Arowhanan", "Ngaterian", "Motuan", "Urutawan", "Korangan", "Puaroan", "Ohauan", "Heterian", "Temaikan", "Ururoan", "Aratauran", "Otapirian", "Warepan", "Otamitan", "Oretian", "Kaihikuan", "Etalian", "Malakovian", "Nelsonian", "Makarewan", "Waiitian", "Puruhauan", "Flettian", "Barettian", "Mangapirian", "Telfordian", "Tabenbulakian", "Hsandagolian", "Kekeamuan", "Houldjinian", "Ergilian", "Ulangochuian", "Sharamurunian", "Irdinmanhan", "Arshantan", "Bumbanian", "Gashatan", "Katian", "Sandbian", "Floian", "late Late Ordovician", "MP 30", "MP 29", "MP 28", "MP 27", "MP 26", "MP 25", "MP 24", "MP 23", "MP 22", "MP 21", "MP 20", "MP 19", "MP 18", "MP 17B", "MP 17A", "MP 16", "MP 15", "MP 14", "MP 13", "MP 12", "MP 11", "MP 10", "MP 8 + 9", "MP 7", "MP 6", "MP 1 - 5", "Nihewanian", "Yushean", "Baodean", "Tunggurian", "Shanwangian", "Xiejiaan", "Pannonian", "Sarmatian", "Badenian", "Biarmian", "Yarengian", "Vetlugian", "Bukobayian", "Donguzian", "Gamian", "Fedorovkian", "Ustmylian", "Sludkian", "Rybinskian", "Vokhmian", "Late Vyatkian", "Early Vyatkian", "Late Severodvinian", "Early Severodvinian", "Late Urzhumian", "Early Urzhumian", "Late Kazanian", "Early Kazanian", "Sheshmian", "Solikamskian", "Late Famennian", "Middle Famennian", "Early Famennian", "Late Frasnian", "Middle Frasnian", "Early Frasnian", "Late Emsian", "Early Emsian", "Late Givetian", "Middle Givetian", "Early Givetian", "Dapingian", "Nyborg", "Wulingian", "Qiandongian", "Diandongian", "Niuchehean", "Paibian", "Guzhangian", "Tarantian", "Ionian", "Niagaran", "Salina", "Lockport", "Clinton", "Medina", "Kuimov", "Chagyrka", "Chesnokovka", "Polaty", "Syrovaty", "Vtorye Utesy", "Misikella ultima", "Misikella rhaetica", "Misikella posthernsteini-hernsteini", "Misikella bidentata-posthernsteini", "Meishanian", "Baoqingian", "Laoshanian", "Laibinian"), c("id", "max", "min")))
  
  # Check extant option is a valid chocie and stop and warn user f not
  if(length(setdiff(extant, c("exclude", "include", "only"))) > 0) stop("extant must be one of \"exclude\", \"include\", or \"only\".")
  
  # If extant option is include set text to empty string (will be default in API):
  if(extant == "include") extantoption <- ""
  
  # If extant option is only set text to extant=yes:
  if(extant == "only") extantoption <- "&extant=yes"
  
  # If extant option is exclude set text to extant=no:
  if(extant == "exclude") extantoption <- "&extant=no"

  # Subfunction to break N numbers into breaker-sized blocks:
  NumberChunker <- function(N, breaker) {
    
    # Get total numebr of chunks:
    NChunks <- ceiling(N / breaker)
    
    # Make initial list of numbers:
    ListOfNumbers <- rep(list(1:breaker), NChunks)
    
    # Update last element of list (which can be less than breaker) into the correct size (if required):
    if((N %% breaker) > 0) ListOfNumbers[[length(ListOfNumbers)]] <- 1:(N %% breaker)
    
    # Add cumulative breaker value to all numbers (if required):
    if(N > breaker) ListOfNumbers <- mapply('+', ListOfNumbers, c(0, cumsum(rep(breaker, NChunks - 1))), SIMPLIFY = FALSE)
    
    # Return list of numbers:
    return(ListOfNumbers)
    
  }
  
  # If querying taxon numbers:
  if(is.null(taxon_names)) {
    
    # Build list of numbers to query:
    NumbersToQuery <- lapply(NumberChunker(N = length(taxon_nos), breaker = breaker), function(x) taxon_nos[x])
    
    # Build HTTP string(s):
    ResolvedHTTPStrings <- lapply(NumbersToQuery, function(x) ifelse(original, paste("https://paleobiodb.org/data1.2/taxa/list.json?id=", paste(paste("var:", x, sep = ""), collapse = ","), "&rel=all_children&pres=regular&show=attr", sep = ""), paste("https://paleobiodb.org/data1.2/taxa/list.json?id=", paste(paste("txn:", x, sep = ""), collapse = ","), "&rel=all_children&pres=regular&show=attr", sep = "")))
    
  }
  
  # If querying taxon names:
  if(!is.null(taxon_names)) {
    
    # Build list of names to query:
    NamesToQuery <- lapply(NumberChunker(N = length(taxon_names), breaker = breaker), function(x) taxon_names[x])
    
    # Build HTTP string(s):
    ResolvedHTTPStrings <- lapply(NamesToQuery, function(x) paste("https://paleobiodb.org/data1.2/taxa/list.json?name=", paste(gsub(" ", "%20", gsub("_", " ", gdata::trim(x))), collapse = ","), "&rel=all_children&pres=regular&show=attr", sep = ""))
    
  }
  
  # Add extant option to query:
  ResolvedHTTPStrings <- paste(ResolvedHTTPStrings, extantoption, sep = "")

  # If there are intervals supplied:
  if(!is.null(interval)) {
    
    # Check interval inputs are valid:
    if(length(setdiff(interval, rownames(GeologicIntervals))) > 0) stop(paste("The following are not geologic intervals (or are missspelled):", paste(setdiff(interval, rownames(GeologicIntervals)), collapse = ", "), "(and make sure you use Late/Early rather than Upper/Lower)."))
    
    # If only one interval duplicate it so the next bit works:
    if(length(interval) == 1) interval <- c(interval, interval)
    
    # Check there aren't more than two intervals being specified and stop and warn if found:
    if(length(interval) > 2) stop("Only supply beginning and end intervals (i.e., two values) for interval.")
    
    # Build interval matrix from two intervals:
    IntervalsMatrix <- do.call(rbind, lapply(as.list(interval), function(x) GeologicIntervals[rownames(GeologicIntervals) == x, ]))
    
    # Check one interval does not envelope the other and stop and warn user if so:
    if(any(apply(cbind(IntervalsMatrix[1:2, "max"] >= IntervalsMatrix[2:1, "max"], IntervalsMatrix[1:2, "min"] <= IntervalsMatrix[2:1, "min"]), 1, all)) && unname(IntervalsMatrix[1, "id"] != IntervalsMatrix[2, "id"])) stop("One interval envelopes the other!")
    
    # Check intervals do not overlap and stop and warn user if they do:
    if(any(apply(cbind(IntervalsMatrix[1:2, "max"] > IntervalsMatrix[2:1, "max"], IntervalsMatrix[1:2, "min"] < IntervalsMatrix[2:1, "max"]), 1, all))) stop("Intervals overlap. Choose different intervals that do not overlap and try again.")

    # Build interval string (with intervals in order, oldest first):
    IntervalStringToAdd <- paste("&interval_id=", paste(IntervalsMatrix[order(IntervalsMatrix[, "max"], decreasing = TRUE), "id"], collapse = ","), sep = "")
    
    # Add interval to resolved HTTP strings:
    ResolvedHTTPStrings <- lapply(ResolvedHTTPStrings, function(x) paste(x, IntervalStringToAdd, sep = ""))
    
  }

  # Get resolved json strings for each chunk:
  ResolvedJSON <- lapply(ResolvedHTTPStrings, function(x) {
    
    # Set resolved json to NA (used later to check results are coming back from server):
    resolvedjson <- NA
    
    # Set start value for counter (used later to avoid infinite loop):
    counter <- 0
    
    # While server has not been reached (and querying a taxon number):
    while(is.na(resolvedjson[[1]][1])) {
      
      # Attempt to acquire resolved taxon string:
      try(resolvedjson <- readLines(x), silent = TRUE)
      
      # If server was not reached:
      if(is.na(resolvedjson[[1]][1])) {
        
        # Update counter to record how many attempts to reach server have been made:
        counter <- counter + 1
        
        # If repeatedly failing to get results stop trying:
        if(counter == 100) stop("Server not responding after 100 straight attempts")
        
        # Wait two seconds before next attempt (also avoids overloading server):
        Sys.sleep(2)
        
      }
      
    }
    # Return resolvedjson string:
    return(resolvedjson)
    
  })
  
  # Extract data from json data:
  Output <- do.call(rbind, lapply(ResolvedJSON, function(x) {
    
    # Subfunction to extract specific parameter from json string:
    ParameterExtraction <- function(jsonstring, parameterstring) {
      
      # Extract specific parameter:
      output <- unlist(lapply(as.list(jsonstring), function(x) ifelse(length(grep(parameterstring, x)) > 0, gsub("\"", "", strsplit(strsplit(x, parameterstring)[[1]][2], ",")[[1]][1]), NA)))
      
      # Return output:
      return(output)
      
    }
    
    # If querying taxon numbers:
    if(is.null(taxon_names)) {
      
      # Find any taxon numbers not in database:
      UnknownTaxonHits <- grep("Unknown taxon", x)
      
      # If found stop and warn user:
      if(length(UnknownTaxonHits) > 0) stop(paste("The following taxon numbers were not found in the database: ", paste(unlist(lapply(strsplit(x[UnknownTaxonHits], split = "Unknown taxon '|'\""), '[', 2)), collapse = ", "), sep = ""))
      
    }
    
    # If querying taxon names:
    if(!is.null(taxon_names)) {
      
      # Find any taxon names not in database:
      UnknownTaxonHits <- grep("The name '", x)
      
      # If found stop and warn user:
      if(length(UnknownTaxonHits) > 0) stop(paste("The following taxon names were not found in the database: ", paste(unlist(lapply(strsplit(x[UnknownTaxonHits], split = "The name '|' did not match"), '[', 2)), collapse = ", "), sep = ""))
      
    }
    
    # Isolate record line:
    jsonstring <- x[(grep("\\[", x) + 1):(grep("\\]", x) - 1)]
    
    # Retrieve original taxon number (should be same as input!), if found:
    OriginalTaxonNo <- ParameterExtraction(jsonstring, parameterstring = "\"vid\":")
    
    # Retrieve resolved taxon number, if found:
    ResolvedTaxonNo <- ParameterExtraction(jsonstring, parameterstring = "\"oid\":")
    
    # Retrieve taxon name, if found:
    TaxonName <- ParameterExtraction(jsonstring, parameterstring = "\"nam\":")
    
    # Retrieve taxon rank if found:
    TaxonRank <- ParameterExtraction(jsonstring, parameterstring = "\"rnk\":")
    
    # Retrieve parent taxon number, if found:
    ParentTaxonNo <- ParameterExtraction(jsonstring, parameterstring = "\"par\":")
    
    # Retrieve taxon validity, if known:
    TaxonValidity <- ParameterExtraction(jsonstring, parameterstring = "\"tdf\":")
    
    # Retrieve taxon validity, if known:
    AcceptedNumber <- ParameterExtraction(jsonstring, parameterstring = "\"acc\":")
    
    # Retrieve taxon validity, if known:
    AcceptedName <- ParameterExtraction(jsonstring, parameterstring = "\"acn\":")
    
    # Retrieve taxon validity, if known:
    Attribution <- ParameterExtraction(jsonstring, parameterstring = "\"att\":")
    
    # Retrieve taxon validity, if known:
    Extant <- ParameterExtraction(jsonstring, parameterstring = "\"ext\":")
    
    # Compile output:
    output <- cbind(OriginalTaxonNo, ResolvedTaxonNo, TaxonName, TaxonRank, ParentTaxonNo, TaxonValidity, AcceptedNumber, AcceptedName, Attribution, Extant)
    
    # Add names:
    colnames(output) <- c("OriginalTaxonNo", "ResolvedTaxonNo", "TaxonName", "TaxonRank", "ParentTaxonNo", "TaxonValidity", "AcceptedNumber", "AcceptedName", "Attribution", "Extant")
    
    # Return output:
    return(output)
    
  }))
  
  # If only requesting valid taxa remove all invalids from output:
  if(validonly) Output <- Output[is.na(Output[, "TaxonValidity"]), , drop = FALSE]
  
  # If requesting a specific rank of the output then filter by that rank:
  if(!is.null(returnrank)) Output <- Output[Output[, "TaxonRank"] == returnrank, , drop = FALSE]
  
  # Return output:
  return(Output)
  
}
graemetlloyd/metatree documentation built on April 29, 2021, 2:32 a.m.