R/PaleobiologyDBTaxaQuerier.R

Defines functions PaleobiologyDBTaxaQuerier

Documented in PaleobiologyDBTaxaQuerier

#' Palaeobiology Database Taxa Querier
#'
#' @description
#'
#' Given a Paleobiology Database taxon name or number returns basic information on that taxon.
#'
#' @param taxon_nos A vector of Paleobiology Database taxon numbers to retrieve from the database.
#' @param taxon_names A vector of taxon names to search for in the database (default left to NULL).
#' @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 stopfororphans Whether or not to stop with an Error message for taxa with no parent.
#' @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 known taxon names or numbers and returns information on their validity, name, and rank. Intended for use in building dynamic taxonomic resolutions when constructing 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
#'
#' An eight-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 each taxon, the taxon validity (if relevant; returns NA if already valid), the accepted taxon number (if relevant), and the accepted taxon name (if relevant).
#'
#' @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 Allosaurus fragilis:
#' PaleobiologyDBTaxaQuerier(taxon_nos = "52962")
#'
#' @export PaleobiologyDBTaxaQuerier
PaleobiologyDBTaxaQuerier <- function(taxon_nos, taxon_names = NULL, original = TRUE, interval = NULL, extant = "include", stopfororphans = TRUE, 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 = ","), "&show=parent", sep = ""), paste("https://paleobiodb.org/data1.2/taxa/list.json?id=", paste(paste("txn:", x, sep = ""), collapse = ","), "&show=parent", 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 = ","), "&show=parent", 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. Choose non-envelopping intervals and try again.")
    
    # 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 && original) 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[(rev(grep("\\[", x))[1] + 1):(rev(grep("\\]", x))[1] - 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\":")
    
    # Compile output:
    output <- cbind(OriginalTaxonNo, ResolvedTaxonNo, TaxonName, TaxonRank, ParentTaxonNo, TaxonValidity, AcceptedNumber, AcceptedName)
    
    # Add names:
    colnames(output) <- c("OriginalTaxonNo", "ResolvedTaxonNo", "TaxonName", "TaxonRank", "ParentTaxonNo", "TaxonValidity", "AcceptedNumber", "AcceptedName")
    
    # Return output:
    return(output)
    
  }))
  
  # If querying based on taxon number(s):
  if(is.null(taxon_names) && original) {
    
    # Extract taxon numbers found in database:
    TaxonNumbers <- unlist(lapply(lapply(lapply(apply(cbind(gsub("var:", "", Output[, "OriginalTaxonNo"]), gsub("txn:", "", Output[, "ResolvedTaxonNo"])), 1, as.list), unlist), function(x) x[!is.na(x)]), '[', 1))
    
    # Sort output by taxon numbers in the order they were supplied:
    Output <- Output[match(taxon_nos, TaxonNumbers), , drop = FALSE]

  }
  
  # If querying based on taxon name(s):
  if(!is.null(taxon_names)) {
    
    # Sort output by taxon names in order they were supplied:
    Output <- Output[match(gsub("_", " ", taxon_names), Output[, "TaxonName" ]), , drop = FALSE]
    
    # If any names didn't show up (can happen when a subgenus gets wrongly inserted):
    if(any(is.na(Output[, "TaxonName"]))) {
      
      # Compile missing names:
      MissingNames <- taxon_names[which(is.na(Output[, "TaxonName"]))]
      
      # Try and find correct name by searching for descendants of the genus:
      FoundNames <- do.call(rbind, lapply(as.list(MissingNames), function(x) {GenusPart <- strsplit(x, " ")[[1]][1]; DescendantQuery <- PaleobiologyDBDescendantFinder("1", GenusPart, returnrank = 3); if(!any(DescendantQuery[, "TaxonName"] == x)) paste0("Could not find ", x, " in database. Something weird is going on so check this taxon,"); DescendantQuery[DescendantQuery[, "TaxonName"] == x, colnames(Output)]}))
      
      # Update output accordingly:
      Output[which(is.na(Output[, "TaxonName"])), ] <- FoundNames
      
    }
  }
  
  # If stopping for orphans check for them (excluding life) and stop if found:
  if(stopfororphans) if(any(sort(as.numeric(is.na(Output[, "ParentTaxonNo"])) - as.numeric(Output[, "TaxonName"] == "Life") == 1))) {
    
    # Make vector of orphan tax(a) names:
    OrphanTaxa <- which(as.numeric(is.na(Output[, "ParentTaxonNo"])) - as.numeric(Output[, "TaxonName"] == "Life") == 1)
    
    # Stop and warn user of orphans:
    if(length(OrphanTaxa) > 0) stop(paste("The following taxa are orphans: ", paste(Output[OrphanTaxa, "TaxonName"], collapse = ", "), sep = ""))
    
  }
  
  # Return output:
  return(Output)
  
}

# Example of orphan error:
#PaleobiologyDBTaxonQuerier(taxon_nos = as.character(370001:370100), taxon_names = NULL, original = TRUE, stopfororphans = TRUE)

#Examples of different types of taxa:
#PaleobiologyDBTaxonQuerier(taxon_nos = c("64336", "52962", "38856", "52773", "285777"), taxon_names = NULL, original = TRUE, stopfororphans = TRUE)
graemetlloyd/metatree documentation built on April 29, 2021, 2:32 a.m.