taxize: taxonomic search and retrieval in R

preprint OA: closed CC-BY-4.0
AI-generated summary by claude@2026-07, 2026-07-14

The taxize R package was developed to provide simple, programmatic access to taxonomic data from 13 online sources, facilitating open and reproducible scientific workflows.

One-sentence paraphrase of the abstract; not a substitute for reading it. No clinical advice. How this works

AI-generated deep summary by claude@2026-07, 2026-07-14 · read from full text

The provided text appears to be an embedded JavaScript bundle for a web page (including analytics/consent and monitoring code), not the content of a biomedical research paper. It contains no description of study objectives, a biomedical population, methods for experiments or data collection, or results and limitations typical of a research article. Because the text is technical front-end code rather than research, there are no findings to extract. The paper does not explicitly discuss endometriosis or adenomyosis; it was included in the corpus via a keyword match in the upstream search index.

Read from the paper's body, not the abstract. Not a substitute for reading the paper. No clinical advice. How this works

Abstract

All species are hierarchically related to one another, and we use taxonomic names to label the nodes in this hierarchy. Taxonomic data is becoming increasingly available on the web, but scientists need a way to access it in a programmatic fashion that’s easy and reproducible. We have developed taxize, an open-source software package (freely available from http://cran.r-project.org/web/packages/taxize/index.html ) for the R language. taxize provides simple, programmatic access to taxonomic data for 13 data sources around the web. We discuss the need for a taxonomic toolbelt in R, and outline a suite of use cases for which taxize is ideally suited (including a full workflow as an appendix). The taxize package facilitates open and reproducible science by allowing taxonomic data collection to be done in the open-source R platform.
Full text 197,947 characters · extracted from preprint-html · click to expand
taxize: taxonomic search and retrieval in R | F1000Research "use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r 3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}(); dataLayer = dataLayer || []; // Standard GTM initialization - Google Consent Mode handles consent automatically (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl+ '>m_auth=hzk0Vc3qFsQYhCrIoHz68A>m_preview=env-1>m_cookies_win=x';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MWFK8L5J'); ;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]}}; ;NREUM.loader_config={accountID:"438030",trustKey:"438030",agentID:"772317073",licenseKey:"97f8f67f26",applicationID:"772317073"} ;NREUM.info={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",licenseKey:"97f8f67f26",applicationID:"772317073",sa:1} ;/*! For license information please see nr-loader-spa-1.236.0.min.js.LICENSE.txt */ (()=>{"use strict";var e,t,r={5763:(e,t,r)=>{r.d(t,{P_:()=>l,Mt:()=>g,C5:()=>s,DL:()=>v,OP:()=>T,lF:()=>D,Yu:()=>y,Dg:()=>h,CX:()=>c,GE:()=>b,sU:()=>_});var n=r(8632),i=r(9567);const o={beacon:n.ce.beacon,errorBeacon:n.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.D)(t,o),(0,n.Qy)(e,a[e],"info")}var u=r(7056);const d=()=>{const e={blockSelector:"[data-nr-block]",maskInputOptions:{password:!0}};return{allow_bfcache:!0,privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0,harvestTimeSeconds:10},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},session:{domain:void 0,expiresMs:u.oD,inactiveMs:u.Hb},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10},metrics:{enabled:!0},page_action:{enabled:!0,harvestTimeSeconds:30},page_view_event:{enabled:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1},session_trace:{enabled:!0,harvestTimeSeconds:10},harvest:{tooManyRequestsDelay:60},session_replay:{enabled:!1,harvestTimeSeconds:60,sampleRate:.1,errorSampleRate:.1,maskTextSelector:"*",maskAllInputs:!0,get blockClass(){return"nr-block"},get ignoreClass(){return"nr-ignore"},get maskTextClass(){return"nr-mask"},get blockSelector(){return e.blockSelector},set blockSelector(t){e.blockSelector+=",".concat(t)},get maskInputOptions(){return e.maskInputOptions},set maskInputOptions(t){e.maskInputOptions={...t,password:!0}}},spa:{enabled:!0,harvestTimeSeconds:10}}},f={};function l(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!f[e])throw new Error("Configuration for ".concat(e," was never set"));return f[e]}function h(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");f[e]=(0,i.D)(t,d()),(0,n.Qy)(e,f[e],"config")}function g(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var r=l(e);if(r){for(var n=t.split("."),i=0;i {r.d(t,{D:()=>i});var n=r(50);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.Z)("Setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,n.Z)("Setting a Configurable requires a model to set its initial properties");const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.Z)("An error occurred while setting a property of a Configurable",e)}return r}catch(e){(0,n.Z)("An error occured while setting a Configurable",e)}}},6818:(e,t,r)=>{r.d(t,{Re:()=>i,gF:()=>o,q4:()=>n});const n="1.236.0",i="PROD",o="CDN"},385:(e,t,r)=>{r.d(t,{FN:()=>a,IF:()=>u,Nk:()=>f,Tt:()=>s,_A:()=>o,il:()=>n,pL:()=>c,v6:()=>i,w1:()=>d});const n="undefined"!=typeof window&&!!window.document,i="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),o=n?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=""+o?.location,s=/iPad|iPhone|iPod/.test(navigator.userAgent),c=s&&"undefined"==typeof SharedWorker,u=(()=>{const e=navigator.userAgent.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),d=Boolean(n&&window.document.documentMode),f=!!navigator.sendBeacon},1117:(e,t,r)=>{r.d(t,{w:()=>o});var n=r(50);const i={agentIdentifier:"",ee:void 0};class o{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,i),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(i).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},8e3:(e,t,r)=>{r.d(t,{L:()=>d,R:()=>c});var n=r(2177),i=r(1284),o=r(4322),a=r(3325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function u(e){e&&(s[e]||(s[e]=new Map))}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature";if(u(e),!e||!s[e].get(t))return a(t);s[e].get(t).staged=!0;const r=[...s[e]];function a(t){const r=e?n.ee.get(e):n.ee,a=o.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var u=0;s&&u {let[t,r]=e;return r.staged}))&&(r.sort(((e,t)=>e[1].priority-t[1].priority)),r.forEach((e=>{let[t]=e;a(t)})))}function f(e,t){var r=e[1];(0,i.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var i=r[1],o=e[3],a=e[2];i.apply(o,a)}}))}},2177:(e,t,r)=>{r.d(t,{c:()=>f,ee:()=>u});var n=r(8632),i=r(2210),o=r(1284),a=r(5763),s="nr@context";let c=(0,n.fP)();var u;function d(){}function f(e){return(0,i.X)(e,s,l)}function l(){return new d}function h(){u.aborted=!0,u.backlog={}}c.ee?u=c.ee:(u=function e(t,r){var n={},c={},f={},g=!1;try{g=16===r.length&&(0,a.OP)(r).isolatedBacklog}catch(e){}var p={on:b,addEventListener:b,removeEventListener:y,emit:v,get:x,listeners:w,context:m,buffer:A,abort:h,aborted:!1,isBuffering:E,debugId:r,backlog:g?{}:t&&"object"==typeof t.backlog?t.backlog:{}};return p;function m(e){return e&&e instanceof d?e:e?(0,i.X)(e,s,l):l()}function v(e,r,n,i,o){if(!1!==o&&(o=!0),!u.aborted||i){t&&o&&t.emit(e,r,n);for(var a=m(n),s=w(e),d=s.length,f=0;fn,p:()=>i});var n=r(2177).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},4322:(e,t,r)=>{r.d(t,{X:()=>o});var n=r(5546);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.E,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.E);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3239:(e,t,r)=>{r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(385);let i=!1,o=!1;try{const e={get passive(){return i=!0,!1},get signal(){return o=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return i||o?{capture:!!e,passive:i,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;window.addEventListener(e,t,a(r,n))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;document.addEventListener(e,t,a(r,n))}},4402:(e,t,r)=>{r.d(t,{Ht:()=>u,M:()=>c,Rl:()=>a,ky:()=>s});var n=r(385);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n._A?.crypto||n._A?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(31))),i.split("").map((e=>"x"===e?o(t,++r).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n._A?.crypto||n._A?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(31)));const a=[];for(var s=0;s {r.d(t,{Bq:()=>n,Hb:()=>o,oD:()=>i});const n="NRBA",i=144e5,o=18e5},7894:(e,t,r)=>{function n(){return Math.round(performance.now())}r.d(t,{z:()=>n})},7243:(e,t,r)=>{r.d(t,{e:()=>o});var n=r(385),i={};function o(e){if(e in i)return i[e];if(0===(e||"").indexOf("data:"))return{protocol:"data"};let t;var r=n._A?.location,o={};if(n.il)t=document.createElement("a"),t.href=e;else try{t=new URL(e,r.href)}catch(e){return o}o.port=t.port;var a=t.href.split("://");!o.port&&a[1]&&(o.port=a[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===a[0]?"443":"80"),o.hostname=t.hostname||r.hostname,o.pathname=t.pathname,o.protocol=a[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var s=!t.protocol||":"===t.protocol||t.protocol===r.protocol,c=t.hostname===r.hostname&&t.port===r.port;return o.sameOrigin=s&&(!t.hostname||c),"/"===o.pathname&&(i[e]=o),o}},50:(e,t,r)=>{function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},2587:(e,t,r)=>{r.d(t,{N:()=>c,T:()=>u});var n=r(2177),i=r(5546),o=r(8e3),a=r(3325);const s={stn:[a.D.sessionTrace],err:[a.D.jserrors,a.D.metrics],ins:[a.D.pageAction],spa:[a.D.spa],sr:[a.D.sessionReplay,a.D.sessionTrace]};function c(e,t){const r=n.ee.get(t);e&&"object"==typeof e&&(Object.entries(e).forEach((e=>{let[t,n]=e;void 0===u[t]&&(s[t]?s[t].forEach((e=>{n?(0,i.p)("feat-"+t,[],void 0,e,r):(0,i.p)("block-"+t,[],void 0,e,r),(0,i.p)("rumresp-"+t,[Boolean(n)],void 0,e,r)})):n&&(0,i.p)("feat-"+t,[],void 0,void 0,r),u[t]=Boolean(n))})),Object.keys(s).forEach((e=>{void 0===u[e]&&(s[e]?.forEach((t=>(0,i.p)("rumresp-"+e,[!1],void 0,t,r))),u[e]=!1)})),(0,o.L)(t,a.D.pageViewEvent))}const u={}},2210:(e,t,r)=>{r.d(t,{X:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},1284:(e,t,r)=>{r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},4351:(e,t,r)=>{r.d(t,{P:()=>o});var n=r(2177);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},3960:(e,t,r)=>{r.d(t,{K:()=>a,b:()=>o});var n=r(3239);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.bP)("load",e,t)}function a(e){if(i())return e();(0,n.iz)("DOMContentLoaded",e)}},8632:(e,t,r)=>{r.d(t,{EZ:()=>u,Qy:()=>c,ce:()=>o,fP:()=>a,gG:()=>d,mF:()=>s});var n=r(7894),i=r(385);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return i._A.NREUM||(i._A.NREUM={}),void 0===i._A.newrelic&&(i._A.newrelic=i._A.NREUM),i._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:i._A.setTimeout,SI:i._A.setImmediate,CT:i._A.clearTimeout,XHR:i._A.XMLHttpRequest,REQ:i._A.Request,EV:i._A.Event,PR:i._A.Promise,MO:i._A.MutationObserver,FETCH:i._A.fetch}),e}function c(e,t,r){let i=a();const o=i.initializedAgents||{},s=o[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,n.z)(),date:new Date}),i.initializedAgents={...o,[e]:{...s,[r]:t}},i}function u(e,t){a()[e]=t}function d(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},7956:(e,t,r)=>{r.d(t,{N:()=>i});var n=r(3239);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;return void(0,n.iz)("visibilitychange",(function(){if(t)return void("hidden"==document.visibilityState&&e());e(document.visibilityState)}),r,i)}},1214:(e,t,r)=>{r.d(t,{em:()=>v,u5:()=>N,QU:()=>S,_L:()=>I,Gm:()=>L,Lg:()=>M,gy:()=>U,BV:()=>Q,Kf:()=>ee});var n=r(2177);const i="nr@original";var o=Object.prototype.hasOwnProperty,a=!1;function s(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");var a,s,c,u="-"===n.charAt(0);for(c=0;c 2?n-2:0),o=2;o {r(A[T],e,w),r(E[T],e,w)})),r(l._A,"fetch",y),t.on(y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(y+"done",[null,r],n)}else t.emit(y+"done",[e],n)})),t}const O={},j=["pushState","replaceState"];function S(e){const t=function(e){return(e||n.ee).get("history")}(e);return!l.il||O[t.debugId]++||(O[t.debugId]=1,s(t).inPlace(window.history,j,"-")),t}var P=r(3239);const C={},R=["appendChild","insertBefore","replaceChild"];function I(e){const t=function(e){return(e||n.ee).get("jsonp")}(e);if(!l.il||C[t.debugId])return t;C[t.debugId]=!0;var r=s(t),i=/[?&](?:callback|cb)=([^&#]+)/,o=/(.*)\.([^.]+)/,a=/^(\w+)(\.|$)(.*)$/;function c(e,t){var r=e.match(a),n=r[1],i=r[3];return i?c(i,t[n]):t[n]}return r.inPlace(Node.prototype,R,"dom-"),t.on("dom-start",(function(e){!function(e){if(!e||"string"!=typeof e.nodeName||"script"!==e.nodeName.toLowerCase())return;if("function"!=typeof e.addEventListener)return;var n=(a=e.src,s=a.match(i),s?s[1]:null);var a,s;if(!n)return;var u=function(e){var t=e.match(o);if(t&&t.length>=3)return{key:t[2],parent:c(t[1],window)};return{key:e,parent:window}}(n);if("function"!=typeof u.parent[u.key])return;var d={};function f(){t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}function l(){t.emit("jsonp-error",[],d),t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}r.inPlace(u.parent,[u.key],"cb-",d),e.addEventListener("load",f,(0,P.m$)(!1)),e.addEventListener("error",l,(0,P.m$)(!1)),t.emit("new-jsonp",[e.src],d)}(e[0])})),t}var k=r(5763);const H={};function L(e){const t=function(e){return(e||n.ee).get("mutation")}(e);if(!l.il||H[t.debugId])return t;H[t.debugId]=!0;var r=s(t),i=k.Yu.MO;return i&&(window.MutationObserver=function(e){return this instanceof i?new i(r(e,"fn-")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype),t}const z={};function M(e){const t=function(e){return(e||n.ee).get("promise")}(e);if(z[t.debugId])return t;z[t.debugId]=!0;var r=n.c,o=s(t),a=k.Yu.PR;return a&&function(){function e(r){var n=t.context(),i=o(r,"executor-",n,null,!1);const s=Reflect.construct(a,[i],e);return t.context(s).getCtx=function(){return n},s}l._A.Promise=e,Object.defineProperty(e,"name",{value:"Promise"}),e.toString=function(){return a.toString()},Object.setPrototypeOf(e,a),["all","race"].forEach((function(r){const n=a[r];e[r]=function(e){let i=!1;[...e||[]].forEach((e=>{this.resolve(e).then(a("all"===r),a(!1))}));const o=n.apply(this,arguments);return o;function a(e){return function(){t.emit("propagate",[null,!i],o,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(r){const n=a[r];e[r]=function(e){const r=n.apply(this,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),e.prototype=a.prototype;const n=a.prototype.then;a.prototype.then=function(){var e=this,i=r(e);i.promise=e;for(var a=arguments.length,s=new Array(a),c=0;c e())),t};function m(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}function b(){var e=this,t=r.context(e);e.readyState>3&&!t.resolved&&(t.resolved=!0,r.emit("xhr-resolved",[],e)),i.inPlace(e,f,"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,p),p.prototype=o.prototype,i.inPlace(p.prototype,J,"-xhr-",E),r.on("send-xhr-start",(function(e,t){m(e,t),function(e){h.push(e),a&&(y?y.then(A):u?u(A):(w=-w,x.data=w))}(t)})),r.on("open-xhr-start",m),a){var y=c&&c.resolve();if(!u&&!c){var w=1,x=document.createTextNode(w);new a(A).observe(x,{characterData:!0})}}else t.on("fn-end",(function(e){e[0]&&e[0].type===d||A()}));function A(){for(var e=0;e {r.d(t,{t:()=>n});const n=r(3325).D.ajax},6660:(e,t,r)=>{r.d(t,{A:()=>i,t:()=>n});const n=r(3325).D.jserrors,i="nr@seenError"},3081:(e,t,r)=>{r.d(t,{gF:()=>o,mY:()=>i,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(3325).D.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},4649:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageAction},7633:(e,t,r)=>{r.d(t,{Dz:()=>i,OJ:()=>a,qw:()=>o,t9:()=>n});const n=r(3325).D.pageViewEvent,i="firstbyte",o="domcontent",a="windowload"},9251:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageViewTiming},3614:(e,t,r)=>{r.d(t,{BST_RESOURCE:()=>i,END:()=>s,FEATURE_NAME:()=>n,FN_END:()=>u,FN_START:()=>c,PUSH_STATE:()=>d,RESOURCE:()=>o,START:()=>a});const n=r(3325).D.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState"},7836:(e,t,r)=>{r.d(t,{BODY:()=>A,CB_END:()=>E,CB_START:()=>u,END:()=>x,FEATURE_NAME:()=>i,FETCH:()=>_,FETCH_BODY:()=>v,FETCH_DONE:()=>m,FETCH_START:()=>p,FN_END:()=>c,FN_START:()=>s,INTERACTION:()=>l,INTERACTION_API:()=>d,INTERACTION_EVENTS:()=>o,JSONP_END:()=>b,JSONP_NODE:()=>g,JS_TIME:()=>T,MAX_TIMER_BUDGET:()=>a,REMAINING:()=>f,SPA_NODE:()=>h,START:()=>w,originalSetTimeout:()=>y});var n=r(5763);const i=r(3325).D.spa,o=["click","submit","keypress","keydown","keyup","change"],a=999,s="fn-start",c="fn-end",u="cb-start",d="api-ixn-",f="remaining",l="interaction",h="spaNode",g="jsonpNode",p="fetch-start",m="fetch-done",v="fetch-body-",b="jsonp-end",y=n.Yu.ST,w="-start",x="-end",A="-body",E="cb"+x,T="jsTime",_="fetch"},5938:(e,t,r)=>{r.d(t,{W:()=>o});var n=r(5763),i=r(2177);class o{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=i.ee.get(e,(0,n.OP)(this.agentIdentifier).isolatedBacklog),this.featureName=r,this.blocked=!1}}},9144:(e,t,r)=>{r.d(t,{j:()=>m});var n=r(3325),i=r(5763),o=r(5546),a=r(2177),s=r(7894),c=r(8e3),u=r(3960),d=r(385),f=r(50),l=r(3081),h=r(8632);function g(){const e=(0,h.gG)();["setErrorHandler","finished","addToTrace","inlineHit","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId"].forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),i=0;i 1?r-1:0),i=1;i {e.exposed&&e.api[t]&&o.push(e.api[t](...n))})),o.length>1?o:o[0]}(t,...n)}}))}var p=r(2587);function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},m=arguments.length>2?arguments[2]:void 0,v=arguments.length>3?arguments[3]:void 0,{init:b,info:y,loader_config:w,runtime:x={loaderType:m},exposed:A=!0}=t;const E=(0,h.gG)();y||(b=E.init,y=E.info,w=E.loader_config),(0,i.Dg)(e,b||{}),(0,i.GE)(e,w||{}),(0,i.sU)(e,x),y.jsAttributes??={},d.v6&&(y.jsAttributes.isWorker=!0),(0,i.CX)(e,y),g();const T=function(e,t){t||(0,c.R)(e,"api");const h={};var g=a.ee.get(e),p=g.get("tracer"),m="api-",v=m+"ixn-";function b(t,r,n,o){const a=(0,i.C5)(e);return null===r?delete a.jsAttributes[t]:(0,i.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),x(m,n,!0,o||null===r?"session":void 0)(t,r)}function y(){}["setErrorHandler","finished","addToTrace","inlineHit","addRelease"].forEach((e=>h[e]=x(m,e,!0,"api"))),h.addPageAction=x(m,"addPageAction",!0,n.D.pageAction),h.setCurrentRouteName=x(m,"routeName",!0,n.D.spa),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,i.OP)(e).customTransaction=(r||"http://custom.transaction")+t,x(m,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number"].includes(typeof t)||null===t)return b(e,t,"setCustomAttribute",r);(0,f.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of was provided."))}else(0,f.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of was provided."))},h.setUserId=function(e){if("string"==typeof e||null===e)return b("enduser.id",e,"setUserId",!0);(0,f.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of was provided."))},h.interaction=function(){return(new y).get()};var w=y.prototype={createTracer:function(e,t){var r={},i=this,a="function"==typeof t;return(0,o.p)(v+"tracer",[(0,s.z)(),e,r],i,n.D.spa,g),function(){if(p.emit((a?"":"no-")+"fn-start",[(0,s.z)(),i,a],r),a)try{return t.apply(this,arguments)}catch(e){throw p.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],r),e}finally{p.emit("fn-end",[(0,s.z)()],r)}}}};function x(e,t,r,i){return function(){return(0,o.p)(l.xS,["API/"+t+"/called"],void 0,n.D.metrics,g),i&&(0,o.p)(e+t,[(0,s.z)(),...arguments],r?null:this,i,g),r?void 0:this}}function A(){r.e(439).then(r.bind(r,7438)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>(0,f.Z)("Downloading runtime APIs failed...")))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{w[e]=x(v,e,void 0,n.D.spa)})),h.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,o.p)(l.xS,["API/noticeError/called"],void 0,n.D.metrics,g),(0,o.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,g)},d.il?(0,u.b)((()=>A()),!0):A(),h}(e,v);return(0,h.Qy)(e,T,"api"),(0,h.Qy)(e,A,"exposed"),(0,h.EZ)("activatedFeatures",p.T),T}},3325:(e,t,r)=>{r.d(t,{D:()=>n,p:()=>i});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8,[n.sessionReplay]:9}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(({78:"page_action-aggregate",147:"metrics-aggregate",242:"session-manager",317:"jserrors-aggregate",348:"page_view_timing-aggregate",412:"lazy-feature-loader",439:"async-api",538:"recorder",590:"session_replay-aggregate",675:"compressor",733:"session_trace-aggregate",786:"page_view_event-aggregate",873:"spa-aggregate",898:"ajax-aggregate"}[e]||e)+"."+{78:"ac76d497",147:"3dc53903",148:"1a20d5fe",242:"2a64278a",317:"49e41428",348:"bd6de33a",412:"2f55ce66",439:"30bd804e",538:"1b18459f",590:"cf0efb30",675:"ae9f91a8",733:"83105561",786:"06482edd",860:"03a8b7a5",873:"e6b09d52",898:"998ef92b"}[e]+"-1.236.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d {s.onerror=s.onload=null,clearTimeout(h);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.j=364,i.p="https://js-agent.newrelic.com/",(()=>{var e={364:0,953:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u {i.r(o);var e=i(3325),t=i(5763);const r=Object.values(e.D);function n(e){const n={};return r.forEach((r=>{n[r]=function(e,r){return!1!==(0,t.Mt)(r,"".concat(e,".enabled"))}(r,e)})),n}var a=i(9144);var s=i(5546),c=i(385),u=i(8e3),d=i(5938),f=i(3960),l=i(50);class h extends d.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.auto=n,this.abortHandler,this.featAggregate,this.onAggregateImported,n&&(0,u.R)(e,r)}importAggregator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.featAggregate||!this.auto)return;const r=c.il&&!0===(0,t.Mt)(this.agentIdentifier,"privacy.cookies_enabled");let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let t;try{if(r){const{setupAgentSession:e}=await Promise.all([i.e(860),i.e(242)]).then(i.bind(i,3228));t=e(this.agentIdentifier)}}catch(e){(0,l.Z)("A problem occurred when starting up session manager. This page will not start or extend any session.",e)}try{if(!this.shouldImportAgg(this.featureName,t))return void(0,u.L)(this.agentIdentifier,this.featureName);const{lazyFeatureLoader:r}=await i.e(412).then(i.bind(i,8582)),{Aggregate:o}=await r(this.featureName,"aggregate");this.featAggregate=new o(this.agentIdentifier,this.aggregator,e),n(!0)}catch(e){(0,l.Z)("Downloading and initializing ".concat(this.featureName," failed..."),e),this.abortHandler?.(),n(!1)}};c.il?(0,f.b)((()=>o()),!0):o()}shouldImportAgg(r,n){return r!==e.D.sessionReplay||!1!==(0,t.Mt)(this.agentIdentifier,"session_trace.enabled")&&(!!n?.isNew||!!n?.state.sessionReplay)}}var g=i(7633),p=i(7894);class m extends h{static featureName=g.t9;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(super(r,n,g.t9,i),("undefined"==typeof PerformanceNavigationTiming||c.Tt)&&"undefined"!=typeof PerformanceTiming){const n=(0,t.OP)(r);n[g.Dz]=Math.max(Date.now()-n.offset,0),(0,f.K)((()=>n[g.qw]=Math.max((0,p.z)()-n[g.Dz],0))),(0,f.b)((()=>{const t=(0,p.z)();n[g.OJ]=Math.max(t-n[g.Dz],0),(0,s.p)("timing",["load",t],void 0,e.D.pageViewTiming,this.ee)}))}this.importAggregator()}}var v=i(1117),b=i(1284);class y extends v.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,i){var o=this.getBucket(e,t,r,i);return o.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,b.D)(e,(function(e,r){t[e]=w(r,t[e])})),t}(n,o.metrics),o}merge(e,t,r,n,i){var o=this.getBucket(e,t,n,i);if(o.metrics){var a=o.metrics;a.count+=r.count,(0,b.D)(r,(function(e,t){if("count"!==e){var n=a[e],i=r[e];i&&!i.c?a[e]=w(i.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=x(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(i,a[e])}}))}else o.metrics=r}storeMetric(e,t,r,n){var i=this.getBucket(e,t,r);return i.stats=w(n,i.stats),i}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var i=this.aggregatedData[e][t];return i||(i=this.aggregatedData[e][t]={params:r||{}},n&&(i.custom=n)),i}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,i=0;i t.max&&(t.max=e),e 2&&void 0!==arguments[2])||arguments[2];super(e,r,j.t,n),c.il&&((0,t.OP)(e).initHidden=Boolean("hidden"===document.visibilityState),(0,N.N)((()=>(0,s.p)("docHidden",[(0,p.z)()],void 0,j.t,this.ee)),!0),(0,O.bP)("pagehide",(()=>(0,s.p)("winPagehide",[(0,p.z)()],void 0,j.t,this.ee))),this.importAggregator())}}var P=i(3081);class C extends h{static featureName=P.t9;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,P.t9,r),this.importAggregator()}}var R,I=i(2210),k=i(1214),H=i(2177),L={};try{R=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(L.console=!0,-1!==R.indexOf("dev")&&(L.dev=!0),-1!==R.indexOf("nr_dev")&&(L.nrDev=!0))}catch(e){}function z(e){try{L.console&&z(e)}catch(e){}}L.nrDev&&H.ee.on("internal-error",(function(e){z(e.stack)})),L.dev&&H.ee.on("fn-err",(function(e,t,r){z(r.stack)})),L.dev&&(z("NR AGENT IN DEVELOPMENT MODE"),z("flags: "+(0,b.D)(L,(function(e,t){return e})).join(", ")));var M=i(6660);class B extends h{static featureName=M.t;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(r,n,M.t,i),this.skipNext=0;try{this.removeOnAbort=new AbortController}catch(e){}const o=this;o.ee.on("fn-start",(function(e,t,r){o.abortHandler&&(o.skipNext+=1)})),o.ee.on("fn-err",(function(t,r,n){o.abortHandler&&!n[M.A]&&((0,I.X)(n,M.A,(function(){return!0})),this.thrown=!0,(0,s.p)("err",[n,(0,p.z)()],void 0,e.D.jserrors,o.ee))})),o.ee.on("fn-end",(function(){o.abortHandler&&!this.thrown&&o.skipNext>0&&(o.skipNext-=1)})),o.ee.on("internal-error",(function(t){(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,o.ee)})),this.origOnerror=c._A.onerror,c._A.onerror=this.onerrorHandler.bind(this),c._A.addEventListener("unhandledrejection",(t=>{const r=function(e){let t="Unhandled Promise Rejection: ";if(e instanceof Error)try{return e.message=t+e.message,e}catch(t){return e}if(void 0===e)return new Error(t);try{return new Error(t+(0,D.P)(e))}catch(e){return new Error(t)}}(t.reason);(0,s.p)("err",[r,(0,p.z)(),!1,{unhandledPromiseRejection:1}],void 0,e.D.jserrors,this.ee)}),(0,O.m$)(!1,this.removeOnAbort?.signal)),(0,k.gy)(this.ee),(0,k.BV)(this.ee),(0,k.em)(this.ee),(0,t.OP)(r).xhrWrappable&&(0,k.Kf)(this.ee),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}onerrorHandler(t,r,n,i,o){"function"==typeof this.origOnerror&&this.origOnerror(...arguments);try{this.skipNext?this.skipNext-=1:(0,s.p)("err",[o||new F(t,r,n),(0,p.z)()],void 0,e.D.jserrors,this.ee)}catch(t){try{(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,this.ee)}catch(e){}}return!1}}function F(e,t,r){this.message=e||"Uncaught error with no additional information",this.sourceURL=t,this.line=r}let U=1;const q="nr@id";function G(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===c._A?0:(0,I.X)(e,q,(function(){return U++}))}function V(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,D.P)(e).length}catch(e){return}}}var X=i(7243);class W{constructor(e){this.agentIdentifier=e,this.generateTracePayload=this.generateTracePayload.bind(this),this.shouldGenerateTrace=this.shouldGenerateTrace.bind(this)}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var r=(0,t.DL)(this.agentIdentifier);if(!r)return null;var n=(r.accountID||"").toString()||null,i=(r.agentID||"").toString()||null,o=(r.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,_.M)(),s=(0,_.Ht)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof c._A?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,D.P)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var r=!1,n={};if((0,t.Mt)(this.agentIdentifier,"distributed_tracing")&&(n=(0,t.P_)(this.agentIdentifier).distributed_tracing),e.sameOrigin)r=!0;else if(n.allowed_origins instanceof Array)for(var i=0;i 2&&void 0!==arguments[2])||arguments[2];super(r,n,Z.t,i),(0,t.OP)(r).xhrWrappable&&(this.dt=new W(r),this.handler=(e,t,r,n)=>(0,s.p)(e,t,r,n,this.ee),(0,k.u5)(this.ee),(0,k.Kf)(this.ee),function(r,n,i,o){function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=E,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){_(t,e)}),(0,O.m$)(!1)),c.IF||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,O.m$)(!1))}function s(e){this.params={method:e[0]},T(this,e[1]),this.metrics={}}function u(e,n){var i=(0,t.DL)(r);i.xpid&&this.sameOrigin&&n.setRequestHeader("X-NewRelic-ID",i.xpid);var a=o.generateTracePayload(this.parsedOrigin);if(a){var s=!1;a.newrelicHeader&&(n.setRequestHeader("newrelic",a.newrelicHeader),s=!0),a.traceContextParentHeader&&(n.setRequestHeader("traceparent",a.traceContextParentHeader),a.traceContextStateHeader&&n.setRequestHeader("tracestate",a.traceContextStateHeader),s=!0),s&&(this.dt=a)}}function d(e,t){var r=this.metrics,i=e[0],o=this;if(r&&i){var a=V(i);a&&(r.txSize=a)}this.startTime=(0,p.z)(),this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof o.end)&&o.end(t)}catch(e){try{n.emit("internal-error",[e])}catch(e){}}};for(var s=0;s 1?e[1]=i:e.push(i)}else e[0]&&e[0].headers&&s(e[0].headers,n)&&(this.dt=n);function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function x(e,t){this.params={},this.metrics={},this.startTime=(0,p.z)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof Y?r=i.url:c._A?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),T(this,r);var o=(""+(i&&i instanceof Y&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.txSize=V(n.body)||0}function A(t,r){var n;this.endTime=(0,p.z)(),this.params||(this.params={}),this.params.status=r?r.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var o={txSize:this.txSize,rxSize:n,duration:(0,p.z)()-this.startTime};i("xhr",[this.params,o,this.startTime,this.endTime,"fetch"],this,e.D.ajax)}function E(t){var r=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var o=0;o 2&&void 0!==arguments[2])||arguments[2];super(e,t,we.t,r),this.importAggregator()}}new class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,_.ky)(16);c._A?(this.agentIdentifier=t,this.sharedAggregator=new y({agentIdentifier:this.agentIdentifier}),this.features={},this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(m),Object.assign(this,(0,a.j)(this.agentIdentifier,e,e.loaderType||"agent")),this.start()):(0,l.Z)("Failed to initial the agent. Could not determine the runtime environment.")}get config(){return{info:(0,t.C5)(this.agentIdentifier),init:(0,t.P_)(this.agentIdentifier),loader_config:(0,t.DL)(this.agentIdentifier),runtime:(0,t.OP)(this.agentIdentifier)}}start(){const t="features";try{const r=n(this.agentIdentifier),i=[...this.desiredFeatures];i.sort(((t,r)=>e.p[t.featureName]-e.p[r.featureName])),i.forEach((t=>{if(r[t.featureName]||t.featureName===e.D.pageViewEvent){const n=function(t){switch(t){case e.D.ajax:return[e.D.jserrors];case e.D.sessionTrace:return[e.D.ajax,e.D.pageViewEvent];case e.D.sessionReplay:return[e.D.sessionTrace];case e.D.pageViewTiming:return[e.D.pageViewEvent];default:return[]}}(t.featureName);n.every((e=>r[e]))||(0,l.Z)("".concat(t.featureName," is enabled but one or more dependent features has been disabled (").concat((0,D.P)(n),"). This may cause unintended consequences or missing data...")),this.features[t.featureName]=new t(this.agentIdentifier,this.sharedAggregator)}})),(0,T.Qy)(this.agentIdentifier,this.features,t)}catch(e){(0,l.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",e);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,T.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.[t],delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[J,m,S,class extends h{static featureName=oe;constructor(t,r){if(super(t,r,oe,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;const n=this.ee;let i;(0,k.QU)(n),this.eventsEE=(0,k.em)(n),this.eventsEE.on(se,(function(e,t){this.bstStart=(0,p.z)()})),this.eventsEE.on(ae,(function(t,r){(0,s.p)("bst",[t[0],r,this.bstStart,(0,p.z)()],void 0,e.D.sessionTrace,n)})),n.on(ce+ne,(function(e){this.time=(0,p.z)(),this.startPath=location.pathname+location.hash})),n.on(ce+ie,(function(t){(0,s.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,e.D.sessionTrace,n)}));try{i=new PerformanceObserver((t=>{const r=t.getEntries();(0,s.p)(te,[r],void 0,e.D.sessionTrace,n)})),i.observe({type:re,buffered:!0})}catch(e){}this.importAggregator({resourceObserver:i})}},C,xe,B,class extends h{static featureName=de;constructor(e,r){if(super(e,r,de,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;if(!(0,t.OP)(e).xhrWrappable)return;try{this.removeOnAbort=new AbortController}catch(e){}let n,i=0;const o=this.ee.get("tracer"),a=(0,k._L)(this.ee),s=(0,k.Lg)(this.ee),u=(0,k.BV)(this.ee),d=(0,k.Kf)(this.ee),f=this.ee.get("events"),l=(0,k.u5)(this.ee),h=(0,k.QU)(this.ee),g=(0,k.Gm)(this.ee);function m(e,t){h.emit("newURL",[""+window.location,t])}function v(){i++,n=window.location.hash,this[ve]=(0,p.z)()}function b(){i--,window.location.hash!==n&&m(0,!0);var e=(0,p.z)();this[pe]=~~this[pe]+e-this[ve],this[ye]=e}function y(e,t){e.on(t,(function(){this[t]=(0,p.z)()}))}this.ee.on(ve,v),s.on(be,v),a.on(be,v),this.ee.on(ye,b),s.on(ge,b),a.on(ge,b),this.ee.buffer([ve,ye,"xhr-resolved"],this.featureName),f.buffer([ve],this.featureName),u.buffer(["setTimeout"+le,"clearTimeout"+fe,ve],this.featureName),d.buffer([ve,"new-xhr","send-xhr"+fe],this.featureName),l.buffer([me+fe,me+"-done",me+he+fe,me+he+le],this.featureName),h.buffer(["newURL"],this.featureName),g.buffer([ve],this.featureName),s.buffer(["propagate",be,ge,"executor-err","resolve"+fe],this.featureName),o.buffer([ve,"no-"+ve],this.featureName),a.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"],this.featureName),y(l,me+fe),y(l,me+"-done"),y(a,"new-jsonp"),y(a,"jsonp-end"),y(a,"cb-start"),h.on("pushState-end",m),h.on("replaceState-end",m),window.addEventListener("hashchange",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("load",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",(function(){m(0,i>1)}),(0,O.m$)(!0,this.removeOnAbort?.signal)),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}],loaderType:"spa"})})(),window.NRBA=o})(); window.jQuery || document.write(' ') CKEDITOR_BASEPATH='https://f1000research.com/js/vendor/ckeditor/' window.reactTheme = 'research'; window.MathJax = { CommonHTML: { linebreaks: { automatic: true } }, 'HTML-CSS': { linebreaks: { automatic: true } }, SVG: { linebreaks: { automatic: true } }, AuthorInit: function() { MathJax.Hub.Register.MessageHook('End Process', function () { let timeout = false; // holder for timeout id const delay = 250; // delay after event is "complete" to run callback const reflowMath = function() { const dispFormulas = document.querySelectorAll('.disp-formula.panel'); if (!dispFormulas) { return; } for (const dispFormula of dispFormulas) { const child = dispFormula.querySelector('.MathJax_Preview').nextSibling.firstChild; const isMultiline = MathJax.Hub.getAllJax(dispFormula)[0].root.isMultiline; if (dispFormula.offsetWidth < child.offsetWidth || isMultiline) { MathJax.Hub.Queue(['Rerender', MathJax.Hub, dispFormula]); } } }; window.addEventListener('resize', function() { clearTimeout(timeout); // clear the timeout timeout = setTimeout(reflowMath, delay); // start timing for event "completion" }); }); }, }; if (window.location.hash == '#_=_'){ window.location = window.location.href.split('#')[0] } !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function() {n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)} ;if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1641728616063202'); fbq('track', "PixelInitialized", {}); (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:2318163,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); search file_upload Submit your research search menu close search Browse Gateways & Collections How to Publish Submit your Research My Submissions Article Guidelines Article Guidelines (New Versions) Open Data, Software and Code Guidelines Open Data and Accessible Source Materials Guidelines (HSS) Open Data, Software and Code Guidelines (PSE) Prepublication Checks Production Process Posters and Slides Guidelines Document Guidelines Article Processing Charges Peer Review Finding Article Reviewers About How it Works For Reviewers Our Advisors Policies Glossary FAQs For Developers Newsroom Contact My Research Submissions Content and Tracking Alerts My Details Sign In file_upload Submit your research { "@context": "https://schema.org", "@type": "ScholarlyArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://f1000research.com/articles/2-191" }, "headline": "taxize: taxonomic search and retrieval in R", "datePublished": "2013-09-18T16:46:18", "dateModified": "2013-10-28T10:48:46", "author": [ { "@type": "Person", "name": "Scott A. Chamberlain" }, { "@type": "Person", "name": "Eduard Szöcs" } ], "publisher": { "@type": "Organization", "name": "F1000Research", "logo": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 480, "width": 60 } }, "image": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 1200, "width": 150 }, "description": "All species are hierarchically related to one another, and we use taxonomic names to label the nodes in this hierarchy. Taxonomic data is becoming increasingly available on the web, but scientists need a way to access it in a programmatic fashion that’s easy and reproducible. We have developed taxize, an open-source software package (freely available from http://cran.r-project.org/web/packages/taxize/index.html) for the R language. taxize provides simple, programmatic access to taxonomic data for 13 data sources around the web. We discuss the need for a taxonomic toolbelt in R, and outline a suite of use cases for which taxize is ideally suited (including a full workflow as an appendix). The taxize package facilitates open and reproducible science by allowing taxonomic data collection to be done in the open-source R platform." } { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": "1", "item": { "@id": "https://f1000research.com/", "name": "Home" } }, { "@type": "ListItem", "position": "2", "item": { "@id": "https://f1000research.com/browse/articles", "name": "Browse" } }, { "@type": "ListItem", "position": "3", "item": { "@id": "https://f1000research.com/articles/2-191/v2", "name": "taxize: taxonomic search and retrieval in R" } } ] } Home Browse taxize: taxonomic search and retrieval in R ALL Metrics - Views Downloads Get PDF Get XML Cite How to cite this article Chamberlain SA and Szöcs E. taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.12688/f1000research.2-191.v2 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. Close Copy Citation Details Export Export Citation Sciwheel EndNote Ref. Manager Bibtex ProCite Sente EXPORT Select a format first Track Share ▬ ✚ Web Tool Updated taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] Scott A. Chamberlain 1 * , Eduard Szöcs 2 * Scott A. Chamberlain 1 * , Eduard Szöcs 2 * * Equal contributors PUBLISHED 28 Oct 2013 Author details Author details 1 Biology, Simon Fraser University, Burnaby, Canada 2 Institute for Environmental Sciences, University Koblenz-Landau, Landau, Germany OPEN PEER REVIEW DETAILS REVIEWER STATUS This article is included in the RPackage gateway. This article is included in the Phylogenetics collection. Abstract All species are hierarchically related to one another, and we use taxonomic names to label the nodes in this hierarchy. Taxonomic data is becoming increasingly available on the web, but scientists need a way to access it in a programmatic fashion that’s easy and reproducible. We have developed taxize, an open-source software package (freely available from http://cran.r-project.org/web/packages/taxize/index.html ) for the R language. taxize provides simple, programmatic access to taxonomic data for 13 data sources around the web. We discuss the need for a taxonomic toolbelt in R, and outline a suite of use cases for which taxize is ideally suited (including a full workflow as an appendix). The taxize package facilitates open and reproducible science by allowing taxonomic data collection to be done in the open-source R platform. READ ALL READ LESS Corresponding Author(s) Scott A. Chamberlain ( [email protected] ) Close Corresponding author: Scott A. Chamberlain Competing interests: No competing interests were disclosed. Grant information: The author(s) declared that no grants were involved in supporting this work. Copyright: © 2013 Chamberlain SA and Szöcs E. This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Data associated with the article are available under the terms of the Creative Commons Zero "No rights reserved" data waiver (CC0 1.0 Public domain dedication). How to cite: Chamberlain SA and Szöcs E. taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.12688/f1000research.2-191.v2 ) First published: 18 Sep 2013, 2 :191 ( https://doi.org/10.12688/f1000research.2-191.v1 ) Latest published: 28 Oct 2013, 2 :191 ( https://doi.org/10.12688/f1000research.2-191.v2 ) Updated Changes from Version 1 We thank the reviewers for their comments. In addition to our responses to reviewers at the bottom, a detailed listing of reviewer comments and our discussion about them can be found here: https://github.com/ropensci/taxize_/issues/178 . The following is a summary of the changes made in response to reviewer's comments: * We have improved language where pointed out by reviews: removed sentences, changed awkward language, and corrected spelling and grammar mistakes. * In response to comments by two of the three reviewer's we have added a third appendix that goes over using API keys and how to install the development version of the software. * There were a number of suggestions about changing the software itself (improving naming of functions and outputs). We agree with these suggestions, and although the changes to the software have not been made yet, we plan on making the changes in the next version of the software and we will then update the manuscript accordingly. We thank the reviewers for their comments. In addition to our responses to reviewers at the bottom, a detailed listing of reviewer comments and our discussion about them can be found here: https://github.com/ropensci/taxize_/issues/178 . The following is a summary of the changes made in response to reviewer's comments: * We have improved language where pointed out by reviews: removed sentences, changed awkward language, and corrected spelling and grammar mistakes. * In response to comments by two of the three reviewer's we have added a third appendix that goes over using API keys and how to install the development version of the software. * There were a number of suggestions about changing the software itself (improving naming of functions and outputs). We agree with these suggestions, and although the changes to the software have not been made yet, we plan on making the changes in the next version of the software and we will then update the manuscript accordingly. See the authors' detailed response to the review by Ethan White See the authors' detailed response to the review by Gavin L. Simpson See the authors' detailed response to the review by Will Pearse READ REVIEWER RESPONSES Introduction Evolution by natural selection has led to a hierarchical relationship among all living organisms. Thus, species are categorized using a taxonomic hierarchy, starting with the binomial species name (e.g, Homo sapiens ), moving up to genus ( Homo ), then family ( Hominidae ), and on up to Domain ( Eukarya ). Although taxonomic classifications are human constructs created to understand the real phylogeny of life 1 , they are nonetheless essential to organize the vast diversity of organisms. Biologists, whether studying organisms at the cell, organismal, or community level, can put their study objects into taxonomic context, allowing them to infer close and distant relatives, find relevant literature, and more. The use of taxonomic names is, unfortunately, not straightforward. Taxonomic names often vary due to name revisions at the generic or specific levels, lumping or splitting lower taxa (genera, species) among higher taxa (families), and name spelling changes. For example, a study found that a compilation of 308,000 plant observations from 51 digitized herbarium records had 22,100 unique taxon names, of which only 13,000 were accepted names 2 , 3 . In addition, there is no one authoritative source of taxonomic names for all taxa - although, there are taxon specific sources that are used by many scientists. Different sources (e.g., uBio [Universal Biological Indexer and Organizer], Tropicos, ITIS [Integrated Taxonomic Information Service]) may use different accepted names for the same taxon. For example, while ITIS has Helianthus x glaucus as an accepted name, The Plant List ( http://www.theplantlist.org ) gives that name as unresolved. But Helianthus glaucus is an accepted name in The Plant List, while ITIS does not list this name. One attempt to help inconsistencies in taxonomy is the use of numeric codes. For example, ITIS assigns a Taxonomic Serial Number (TSN) to each taxon, while uBio assigns each taxon a NameBank identifier (namebankID), and Tropicos assigns their own identifier to each taxon. Codes are helpful within a database as they can easily refer to, for example, Helianthus annuus with a code like 123456 instead of its whole name. However, each database uses their own code; in this case for Helianthus annuus , ITIS uses 36616, uBio uses 2658020, and Tropicos uses 40022652. As there are no universal codes for taxa across databases, this can lead to additional confusion. Last, name comparisons across databases have to be done with the actual names, not the codes. Taxonomic data is getting easier to obtain through the web (e.g., http://eol.org/ ). However, there are a number of good reasons to obtain taxonomic information programatically rather than through a web interface. First, if you have more than a few names to look up on a website, it can take quite a long time to enter each name, get data, and repeat for each species. Programatically getting taxonomic names solves the problem by looping over a list of names. In addition, doing taxonomic searching, etc. becomes reproducible. With increasing reports of irreproducibility in science 4 , 5 , it is extremely important to make science workflows repeatable. The R language is widely used by biologists, and now has over 5,000 packages on the Comprehensive R Archive Network (CRAN) to extend R. R is great for manipulating, visualizing and fitting statistical models to data. Gentleman et al. 6 give a detailed discussion of advantages of R in computational biology. Getting data from the web will be increasingly common as more and more data gets moved to the cloud. Therefore, there is a need to get data from the web directly into R. Increasingly, data is available from the web via application programming interfaces (API). These allow computers to talk to one another using code that is not human readable, but is machine readable. Web APIs often define a number of methods that allow users to search for a species name, or retrieve the synonyms for a species name, for example. A further advantage of APIs is that they are language agnostic, meaning that data can be consumed in almost any computing context, allowing users to interact with the web API without having to know the details of the code. Moreover data can be accessed from every computer, whereas for example an Excel file can only be opened in a few programs. The goal of taxize is to make many use cases that involve retrieving and resolving taxonomic names easy and reproducible. In taxize, we have written a suite of R functions that interact with many taxonomic data sources via their web APIs ( Table 1 ). The interface to each function is usually a simple list of species names, just as a user would enter when interacting with a website. Therefore, we hope that moving from a web to an R interface for taxonomic names will be relatively seamless (if one is already nominally familiar with R). Table 1. Some key functions in taxize, what they do, and their data sources. Function name What it does Source apg_lookup Changes names to match the APGIII list Angiosperm Phylogeny Group http://www.mobot.org/MOBOT/research/APweb/ classification Upstream classification Various col_children Direct children Catalogue of Life http://www.catalogueoflife.org/ col_downstream Downstream taxa to specified rank Catalogue of Life http://www.catalogueoflife.org/ eol_hierarchy Upstream classification Encyclopedia of Life http://eol.org/ eol_search Search EOL taxon information Encyclopedia of Life http://eol.org/ get_seqs Get NCBI sequences National Center for Biotechnology Information 7 get_tsn Get ITIS TSN Integrated Taxonomic Information System http://www.itis.gov/ get_uid Get NCBI UID National Center for Biotechnology Information 7 gisd_isinvasive Invasiveness status Global Invasive Species Database http://www.issg.org/database/welcome/ gni_parse Parse scientific names into components Global Names Index http://gni.globalnames.org/ gni_search Search EOL’s global names index Global Names Index http://gni.globalnames.org/ gnr_resolve Resolve names using EOL’s global names index Global Names Resolver http://resolver.globalnames.org/ itis_downstream Downstream taxa to specified rank Integrated Taxonomic Information System http://www.itis.gov/ iucn_status IUCN status IUCN Red List http://www.iucnredlist.org phylomatic_tree Get a plant Phylogeny Phylomatic 8 plantminer Search Plantminer Plantminer 9 searchbycommonname Search ITIS by common name Integrated Taxonomic Information System http://www.itis.gov/ searchbyscientificname Search ITIS by scientific name Integrated Taxonomic Information System http://www.itis.gov/ tax_name Get taxonomic name for specific rank Various tax_rank Get rank of a taxonomic name Various tnrs Resolve names using iPlant iPlant Taxonomic Name Resolution Service http://tnrs.iplantcollaborative.org/ tp_acceptednames Check for accepted names using Tropicos Tropicos http://www.tropicos.org/ tpl_search Search the Plant List The Plant List http://www.theplantlist.org ubio_namebank Search uBio uBio http://www.ubio.org/index.php?pagename=sample_tools Here, we justify the need for programmatic taxonomic resolution tools like taxize, discuss our data sources, and run through a suite of use cases to demonstrate the variety of ways that users can use taxize. Why do we need taxize? There is a large suite of applications developed around the problem of searching for, resolving, and getting higher taxonomy for species names. For example, Linnaeus http://linnaeus.sourceforge.net/ provides the ability to search for taxonomic names in documents and normalize those names found. In addition, there are many web interfaces to search for and normalize names such as Encyclopedia of Life’s Global Names Resolver http://resolver.globalnames.org/ , uBio tools http://www.ubio.org/index.php?pagename=sample_tools , and iPlant’s Taxonomic Name Resolution Service http://tnrs.iplantcollaborative.org/ . All of these data repositories provide ways to search for taxonomic names and resolve them in some cases. However, scientists ideally need a tool that is free and can be used programmatically, thereby facilitating reproducible research. The goal of taxize is to facilitate the creation of reproducible and easy to use workflows for searching for taxonomic names, resolving them, getting higher taxonomic names, and other tasks related to research dealing with species. Data sources and package details taxize uses many data sources ( Table 1 ), and more can be easily added. There are two common tasks provided by the data sources: name search and name resolution. Other functionality in taxize includes retrieving a classification tree for a species, or retrieving child taxa of a focal taxon. One of the data sources (Phylomatic) returns phylogenies, while another (NCBI) returns genetic sequence data. However, there are other R packages that are focused solely on sequence data, such as rsnps 10 , rentrez 11 , BoSSA 12 , and ape 13 , so taxize does not venture deeply into these other domains. Some of the data sources taxize interacts with require authentication. That is, in addition to the search terms the user provides (e.g., Homo sapiens ), the data provider requires an alphanumeric identification key. This is necessary in some cases so that API providers can 1) better prevent databases crashing from too many requests, 2) collect analytics on requests to their API to provide better performance, etc., and 3) provide user level modification of rules for interacting with the API. The services that require an API key in taxize are: Encyclopedia of Life (EOL) http://eol.org/ , the Universal Biological Indexer and Organizer (uBio) http://www.ubio.org/index.php?pagename=sample_tools , Tropicos http://www.tropicos.org/ , and Plantminer 9 . One can easily obtain API keys by visiting the website of each service (see Table 1 for links to each site). There are two typical ways of using API keys. First, you can pass in your API key in a function call (e.g., ubio_namebank(srchName=’Ursus americanus’, key=’your_alphanumeric_key’) ). Second, you can store your key in the .Rprofile file, which is a common place to store settings. We recommend the second option as it simplifies function calls as taxize detects the stored keys. taxize would not have been possible without the work of others. taxize uses httr 14 and RCurl 15 for performing calls to web APIs, XML 16 for parsing XML, RJSONIO 17 for parsing JSON, and stringr 18 and plyr 19 for manipulating data. New data sources can be added; for example, we plan to add the following sources: Wikispecies and The Tree of Life. A connection to www.freshwaterecology.info (a database with autecological characteristics, ecological preferences and biological traits as well as distribution patterns of more than 12,000 European freshwater organisms belonging to fish, macro-invertebrates, macrophytes, diatoms and phytoplankton) will be finished when their new API is released. In addition, the authors welcome further suggestions of data sources to be added. Use cases First, install taxize First, one must install and load taxize into the R session. install.packages ( "taxize" ) library (taxize) Advanced users can also download and install the latest development copy from GitHub https://github. com/ropensci/taxize_ , also permanently available at http://dx.doi.org/10.5281/zenodo.7097 . Resolve taxonomic names This is a common task in biology. We often have a list of species names and we want to know a) if we have the most up to date names, b) if our names are spelled correctly, and c) the scientific name for a common name. One way to resolve names is via the Global Names Resolver (GNR) service provided by the Encyclopedia of Life http://resolver.globalnames.org/ . Here, on can search for two misspelled names: temp <- gnr_resolve ( names = c ( "Helianthos annus" ٫ "Homo saapiens" )) temp[ , - c ( 1 ٫ 4 )] # ched_name data_source_title # 1 Helianthus annuus L. Catalogue of Life # 2 Helianthus annus GBIF Taxonomic Backbone # 3 Helianthus annus EOL # 4 Helianthus annus L. EOL # 5 Helianthus annus uBio NameBank # 6 Homo sapiens Linnaeus٫ 1758 Catalogue of Life The correct spellings are Helianthus annuus and Homo sapiens . Another approach uses the Taxonomic Name Resolution Service via the Taxosaurus API http:// taxosaurus.org/ developed by iPLant and the Phylotastic organization. In this example is a list of species names, some of which are misspelled, and then call the API with the tnrs function. mynames <- c ( "Helianthus annuus" ٫ "Pinus contort" ٫ "Poa anua" ٫ "Abis magnifica" ٫ "Rosa california" ٫ "Festuca arundinace" ٫ "Sorbus occidentalos" ٫ "Madia sateva" ) tnrs ( query = mynames) [ ٫ - c ( 5 : 7 )] # submittedName acceptedName sourceIdscore # 9 Helianthus annuus Helianthus annus iPlant_TNRS 1 # 10 Helianthus annuus Helianthus annus NCBI 1 # 4 Pinus contort Pinus contorta iPlant_TNRS 0.98 # 5 Poa anua Poa annua iPlant_TNRS 0.96 # 3 Abis magnifica Abies magnifica iPlant_TNRS 0.96 # 7 Rosa california Rosa californica iPlant_TNRS 0.99 # 8 Rosa california California NCBI 1 # 2 Festuca arundinace Festuca arundinacea iPlant_TNRS 0.99 # 1 Sorbus occidentalos Sorbus occidentalis iPlant_TNRS 0.99 # 6 Madia sateva Madia sativa iPlant_TNRS 0.97 It turns out there are a few corrections: e.g., Madia sateva should be Madia sativa , and Rosa california should be Rosa californica . Note that this search worked because fuzzy matching was employed to retrieve names that were close, but not exact matches. Fuzzy matching is only available for plants in the TNRS service, so we advise using EOL’s Global Names Resolver if you need to resolve animal names. taxize takes the approach that the user should be able to make decisions about what resource to trust, rather than making the decision on behalf of the user. Both the EOL GNR and the TNRS services provide data from a variety of data sources. The user may trust a specific data source, and thus may want to use the names from that data source. In the future, we may provide the ability for taxize to suggest the best match from a variety of sources. Another common use case is when there are many synonyms for a species. In this example, there are six synonyms of the currently accepted name for a species. library (plyr) mynames <- c ( "Helianthus annuus ssp. jaegeri" ٫ "Helianthus annuus ssp. lenticularis" ٫ "Helianthus annuus ssp. texanus" ٫ "Helianthus annuus var. lenticularis" ٫ "Helianthus annuus var. macrocarpus" ٫ "Helianthus annuus var. texanus" ) tsn <- get_tsn (mynames) ldply (tsn٫ itis_acceptname) # submittedTsn acceptedName acceptedTsn # 1 525928 Helianthus annuus 36616 # 2 525929 Helianthus annuus 36616 # 3 525930 Helianthus annuus 36616 # 4 536095 Helianthus annuus 36616 # 5 536096 Helianthus annuus 36616 # 6 536097 Helianthus annuus 36616 Retrieve higher taxonomic names Another task biologists often face is getting higher taxonomic names for a taxa list. Having the higher taxonomy allows you to put into context the relationships of your species list. For example, you may find out that species A and species B are in Family C, which may lead to some interesting insight, as opposed to not knowing that Species A and B are closely related. This also makes it easy to aggregate/standardize data to a specific taxonomic level (e.g., family level) or to match data to other databases with different taxonomic resolution (e.g., trait databases). A number of data sources in taxize provide the capability to retrieve higher taxonomic names, but we will highlight two of the more useful ones: Integrated Taxonomic Information System (ITIS) http://www.itis.gov/ and National Center for Biotechnology Information (NCBI) 7 . First, search for two species, Abies procera and Pinus contorta within ITIS. specieslist <- c ( "Abies procera" ٫ "Pinus contorta" ) classification (specieslist٫ db = "itis" ) # $`Abies procera` # rankName taxonName tsn # 1 Kingdom Plantae 202422 # 2 Subkingdom Viridaeplantae 846492 # 3 Infrakingdom Streptophyta 846494 # 4 Division Tracheophyta 846496 # 5 Subdivision Spermatophytina 846504 # 6 Infradivision Gymnospermae 846506 # 7 Class Pinopsida 500009 # 8 Order Pinales 500028 # 9 Family Pinaceae 18030 # 10 Genus Abies 18031 # 11 Species Abies procera 181835 # $`Pinus contorta` # rankName taxonName tsn # 1 Kingdom Plantae 202422 # 2 Subkingdom Viridaeplantae 846492 # 3 Infrakingdom Streptophyta 846494 # 4 Division Tracheophyta 846496 # 5 Subdivision Spermatophytina 846504 # 6 Infradivision Gymnospermae 846506 # 7 Class Pinopsida 500009 # 8 Order Pinales 500028 # 9 Family Pinaceae 18030 # 10 Genus Pinus 18035 # 11 Species Pinus contorta 183327 It turns out both species are in the family Pinaceae. You can also get this type of information from the NCBI by excuting the following code in R: classification(specieslist, db = ’ncbi’) . Instead of a full classification, you may only want a single name, say a family name for your species of interest. The function tax_name is built just for this purpose. As with the classification -function you can specify the data source with the db argument, either ITIS or NCBI. tax_name ( query = "Helianthus annuus" ٫ get = "family" ٫ db = "itis" ) # family # 1 Asteraceae tax_name ( query = "Helianthus annuus" ٫ get = "family" ٫ db = "ncbi" ) # family # 1 Asteraceae If a data source does not provide information on the queried species, the result could be taken from another source and the results from the different sources could be pooled. Interactive name selection As mentioned previously most databases use a numeric code to reference a species. A general workflow in taxize is: Retrieve Code for the queried species and then use this code to query more data/information. Below are a few examples. When you run these examples in R, you are presented with a command prompt asking for the row that contains the name you would like back; that output is not printed below for brevity. In this example, the search term has many matches. The function returns a data.frame of the matches, and asks for the user to input which row number to accept. get_tsn ( searchterm = "Heliastes" ٫ searchtype = "sciname" ) # combinedname tsn # 1 Heliastes bicolor 615238 # 2 Heliastes chrysurus 615250 # 3 Heliastes cinctus 615573 # 4 Heliastes dimidiatus 615257 # 5 Heliastes hypsilepis 615273 # 6 Heliastes immaculatus 615639 # 7 Heliastes opercularis 615300 # 8 Heliastes ovalis 615301 # 1 # NA # attr(٫"class") # [1] "tsn" In another example, you can pass in a long character vector of taxonomic names: splist <- c ( "annona cherimola" ٫ 'annona muricata' ٫ "quercus robur" ٫ "shorea robusta" ٫ "pandanus patina" ٫ "oryza sativa" ٫ "durio zibethinus" ) get_tsn ( searchterm = splist٫ searchtype = "sciname" ) # [1] "506198" "18098" "19405" "506787" "507376" "41976" # [7] "506099" # attr(٫"class") # [1] "tsn" In another example, note that no match at all returns an NA: get_uid ( sciname = c ( "Chironomus riparius" ٫ "aaa vva" )) # [1] "315576" NA # attr(٫"class") # [1] "uid" Retrieve a phylogeny Ecologists are increasingly taking a phylogenetic approach to ecology, applying phylogenies to topics such as the study of community structure 20 , ecological networks 21 , and functional trait ecology 22 . Yet, many biologists are not adequately trained in reconstructing phylogenies. Fortunately, there are some sources for getting a phylogeny without having to know how to build one; one of these is for angiosperms, called Phylomatic 8 . We have created a workflow in taxize that accepts a species list, and taxize works behind the scenes to get higher taxonomic names, which are required by Phylomatic to get a phylogeny. Here is a short example, producing the tree in Figure 1 . Figure 1. A phylogeny for three species. This phylogeny was produced using the phylomatic_tree function, which queries the Phylomatic database, and prunes a previously created phylogeny of plants. taxa <- c ( "Poa annua" ٫ "Abies procera" ٫ "Helianthus annuus" ) tree <- phylomatic_tree ( taxa = taxa) tree$tip.label <- capwords (tree$tip.label) plot (tree٫ cex = 1 ) Behind the scenes the function phylomatic_tree retrieves a Taxonomic Serial Number (TSN) from ITIS for each species name, then a string is created for each species like this poaceae/oryza/oryza_sativa (with format "family/genus/genus_epithet"). These strings are submitted to the Phylomatic API, and if no errors occur, a phylogeny in newick format is returned. The phylomatic_tree() function also cleans up the newick string and converts it to an ape phylo object, which can be used for plotting and phylogenetic analyses. Be aware that Phylomatic has certain limitations - refer to the paper describing Phylomatic 8 and the website http://phylodiversity.net/phylomatic/ . What taxa are children of the taxon of interest? If someone is not a taxonomic specialist on a particular taxon they probably do not know what children taxa are within a family, or within a genus. This task becomes especially unwieldy when there are a large number of taxa downstream. You can of course go to a website like Wikispecies http://species.wikimedia.org/wiki/Main_Page or Encyclopedia of Life http://eol.org/ to get downstream names. However, taxize provides an easy way to programatically search for downstream taxa, both for the Catalogue of Life (CoL) http://www.catalogueoflife.org/ and the Integrated Taxonomic Information System http://www.itis.gov/ . Here is a short example using the CoL in which we want to find all the species within the genus Apis (honey bees). col_downstream ( name = "Apis" ٫ downto = "Species" )[[ 1 ]] # childtaxa_id childtaxa_name childtaxa_rank # 1 6971712 Apis andreniformis Species # 2 6971713 Apis cerana Species # 3 6971714 Apis dorsata Species # 4 6971715 Apis florea Species # 5 6971716 Apis koschevnikovi Species # 6 6845885 Apis mellifera Species # 7 6971717 Apis nigrocincta Species The result from the above call to col_downstream() is a data.frame that gives a number of columns of different information. IUCN status There are a number of things a user can do once they have the correct taxonomic names. One thing a user can do is ask about the conservation status of a species (IUCN Red List of Threatened Species http://www.iucnredlist.org ). We have provided a set of functions, iucn_summary and iucn_status , to search for species names, and extract the status information, respectively. Here, you can search for the panther and lynx. ia <- iucn_summary ( c ( "Panthera uncia" ٫ "Lynx lynx" )) iucn_status (ia) # Panthera uncia Lynx lynx # "EN" "LC" It turns out that the panther has a status of endangered (EN) and the lynx has a status of least concern (LC). Search for available genes in GenBank Another use case available in taxize deals with genetic sequences. taxize has three functions to interact with GenBank to search for available genes ( get_genes_avail ), download genes by GenBank ID ( get_genes ), and download genes via taxonomic name search, including retrieving a congeneric if the searched taxon does not exist in the database ( get_seqs ). In this example, one can search for gene sequences for Umbra limi . out <- get_genes_avail ( taxon_name = "Umbra limi" ٫ seqrange = "1:2000" ٫ getrelated = FALSE ) Then one can ask if ’RAG1’ exists in any of the gene names. out[ grep ( "RAG1" ٫ out$genesavail٫ ignore.case = TRUE )٫ - 3 ] # spused length access_num ids # 413 Umbra limi 732 JX190826 394772608 # 427 Umbra limi 959 AY459526 45479841 # 434 Umbra limi 1631 AY380548 38858304 It turns out that there are 430 different unique records found. However, this doesn’t mean that there are 430 different genes found as the API does not provide metadata to classify genes. You can use regular expressions (e.g., grep ) to search for the gene of interest. Matching species tables with different taxonomic resolution Biologists often need to match different sets of data tied to species. For example, trait-based approaches are a promising tool in ecology 23 . One problem is that abundance data must be matched with trait databases such as the NCBI Taxonomy database 24 . These two data tables may contain species information on different taxonomic levels and data might have to be aggregated to a joint taxonomic level, so that the data can be merged. taxize can help in this data-cleaning step, providing a reproducible workflow. A user can use the mentioned classification -function to retrieve the taxonomic hierarchy and then search the hierarchies up- and downwards for matches. Here is an example to match a species (A) with names of on different taxonomic levels (B1 & B2). A <- "gammarus roeseli" B1 <- "gammarus" B2 <- "gammarus" A_clas <- classification (A٫ db = 'ncbi' ) B1_clas <- classification (B1٫ db = 'ncbi' ) B2_clas <- classification (B2٫ db = 'ncbi' ) A_clas[[ 1 ]]$Rank[ tolower (A_clas[[ 1 ]]$ScientificName) %in% B1] # [1] "genus" A_clas[[ 1 ]]$Rank[ tolower (A_clas[[ 1 ]]$ScientificName) %in% B2] # [1] "family" If one finds a direct match (here Gammarus roeseli ), they will be lucky. However, Gammaridae can also be matched with Gammarus roeseli , but on a lower taxonomic level. A more comprehensive and realistic example (matching a trait table with an abundance table) is given in Appendix B . Aggregating data to a specific taxonomic rank In biology, one can ask questions at varying taxonomic levels. This use case is easily handled in taxize. A function called tax_agg will aggregate community data to a specific taxonomic level. In this example, one can take the data for three species and aggregate them to family level. Again one can specify whether they want to use data from ITIS or NCBI. The rows in the data.frame are different communities. data (dune٫ package = 'vegan' ) df <- dune[ ٫ c ( 1 , 3 : 4 )] colnames (df) <- c ( "Bellis perennis" ٫ "Juncus bufonius" ٫ "Juncus articulatus" ) head (df) # Bellis perennis Juncus bufonius Juncus articulatus # 2 3 0 0 # 13 0 3 0 # 4 2 0 0 # 16 0 0 3 # 6 0 0 0 # 1 0 0 0 agg <- tax_agg (df٫ rank = 'family' ٫ db = 'ncbi' ) agg # # Aggregated community data # # Level of Aggregation: FAMILY # No. taxa before aggregation: 3 # No. taxa after aggregation: 2 # No. taxa not found: 0 head (agg$x) # Asteraceae Juncaceae # 2 3 0 # 13 0 3 # 4 2 0 # 16 0 3 # 6 0 0 # 1 0 0 The two Juncus species are aggregated to the family Juncaceae and their abundances are summed. There was only a single species in the family Asteraceae, so the data for Bellis perennis are carried over. Conclusions Taxonomic information is increasingly sought by biologists as we take phylogenetic and taxonomic approaches to science. Taxonomic data are becoming more widely available on the web, yet scientists require programmatic access to this data for developing reproducible workflows. taxize was created to bridge this gap - to bring taxonomic data on the web into R, where the data can be easily manipulated, visualized, and analyzed in a reproducible workflow. We have outlined a suite of use cases in taxize that will likely fit real use cases for many biologists. Of course we have not thought of all possible use cases, so we hope that the biology community can give us feedback on what use cases they want to see available in taxize. One thing we could change in the future is to make functions that fit use cases, and then allow users to select the data source as a parameter in the function. This could possibly make the user interface easier to understand. taxize is currently under development and will be for some time given the large number of data sources knitted together in the package, and the fact that APIs for each data source can change, requiring changes in taxize code. Contributions to taxize are strongly encouraged, and can be easily done using GitHub here https://github.com/ropensci/taxize_ . We hope taxize will be taken up by the community and developed collaboratively, making it progressively better through time as new use cases arise, bug reports are squashed, and contributions are merged. Author contributions SC and ES equally contributed to the software discussed in this paper, and contributed equally to writing of the manuscript. Competing interests No competing interests were disclosed. Grant information The author(s) declared that no grants were involved in supporting this work. Acknowledgements The taxize package is part of the rOpenSci project http://ropensci.org/ . We thank Carl Boettiger, Karthik Ram, Owen Jones, Naim Matasci, and Ralf Schäfer for comments on previous versions of this manuscript. We thank all API maintainers for their work making their databases open to the public. Faculty Opinions recommended References 1. Benton MJ: Stems, nodes, crown clades, and rank-free lists: is linnaeus dead? Biol Rev Camb Philos Soc. 2000; 75 (4): 633–648. PubMed Abstract | Publisher Full Text 2. Weiser MD, Enquist BJ, Boyle B, et al. : Latitudinal patterns of range size and species richness of new world woody plants. Global Ecology and Biogeography. 2007; 16 (5): 679–688. Publisher Full Text 3. Boyle B, Hopkins N, Lu Z, et al. : The taxonomic name resolution service: an online tool for automated standardization of plant names. BMC Bioinformatics. 2013; 14 (1): 16. PubMed Abstract | Publisher Full Text | Free Full Text 4. Stodden VC: Reproducible research: Addressing the need for data and code sharing in computational science. Comput Sci Eng. 2010; 12 (5): 8–13. Publisher Full Text 5. Zimmer C: A sharp rise in retractions prompts calls for reform. New York Times . 2012. Reference Source 6. Gentleman RC, Carey VJ, Bates DM, et al. : Bioconductor: open software development for computational biology and bioinformatics. Genome Biol. 2004; 5 (10): R80. PubMed Abstract | Publisher Full Text | Free Full Text 7. Federhen S: The ncbi taxonomy database. Nucleic Acids Res. 2012; 40 (Database issue): D136–D143. PubMed Abstract | Publisher Full Text | Free Full Text 8. Webb CO, Donoghue MJ: Phylomatic: tree assembly for applied phylogenetics. Mol Ecol Notes. 2005; 5 (1): 181–183. Publisher Full Text 9. Carvalho GH, Cianciaruso MV, Batalha MA: Plantminer: a web tool for checking and gathering plant species taxonomic information. Environmental Modelling & Software. 2010; 25 (6): 815–816. Publisher Full Text 10. Chamberlain S, Ushey K: rsnps: Interface to SNP data on the web. R package version 0.0.4 2013. Reference Source 11. Winter D: rentrez: Entrez in R, R package version 0.2.1 2013. Reference Source 12. Lefeuvre P: BoSSA: a Bunch of Structure and Sequence Analysis, R package version 1.2 2010. Reference Source 13. Paradis E, Claude J, Strimmer K: APE: analyses of phylogenetics and evolution in R language. Bioinformatics. 2004; 20 (2): 289–290. PubMed Abstract | Publisher Full Text 14. Wickham H: httr: Tools for working with URLs and HTTP. R package version 0.2 2012. Reference Source 15. Lang DT: RCurl: General network (HTTP/FTP/...) client interface for R. R package version 1.95–4.1 2013. Reference Source 16. Lang DT: XML: Tools for parsing and generating XML within R and S-Plus. R package version 3.95–0.2 2013. Reference Source 17. Lang DT: RJSONIO: Serialize R objects to JSON, JavaScript Object Notation. R package version 1.0–3 2013. Reference Source 18. Wickham H: stringr: Make it easier to work with strings. R package version 0.6.2 2012. Reference Source 19. Wickham H: The split-apply-combine strategy for data analysis. J Stat Softw. 2011; 40 (1): 1–29. Reference Source 20. Webb CO, Ackerly DD, McPeek MA, et al. : Phylogenies and community ecology. Annu Rev Ecol Syst. 2002; 33 : 475–505. Publisher Full Text 21. Rafferty NE, Ives AR: Phylogenetic trait-based analyses of ecological networks. Ecology. 2013. Publisher Full Text 22. Poff NL, Olden JD, Vieira NKM, et al. : Functional trait niches of north american lotic insects: traits-based ecological applications in light of phylogenetic relationships. Journal of the North American Benthological Society. 2006; 25 (4): 730–755. Publisher Full Text 23. Statzner B, Bêche LA: Can biological invertebrate traits resolve effects of multiple stressors on running water ecosystems? Freshw Biol. 2010; 55 (Supplement s1): 80–119. Publisher Full Text 24. Usseglio-Polatera P, Bournaud M, Richoux P, et al. : Biological and ecological traits of benthic freshwater macroinvertebrates: relationships and definition of groups with similar traits. Freshw Biol. 2000; 43 (2): 175–205. Publisher Full Text 25. Xie Y: Dynamic Documents with R and knitr. Chapman and Hall/CRC, 2013. Reference Source 26. Baird DJ, Baker CJ, Brua RB, et al. : Toward a knowledge infrastructure for traits-based ecological risk assessment. Integr Environ Assess Manag. 2011; 7 (2): 209–215. PubMed Abstract | Publisher Full Text 27. Kleyer M, Dray S, Bello F, et al. : Assessing species and community functional responses to environmental gradients: which multivariate methods? Journal of Vegetation Science. 2012; 23 (5): 805–821. Publisher Full Text 28. Cayuela L: Taxonstand: Taxonomic standardization of plant species names. R package version 1.0 2012. Reference Source 29. Cayuela L, Granzow-de la Cerda I, Al-buquerque FS, et al. : taxonstand: An r package for species names standardisation in vegetation databases. Methods Ecol Evol. 2012; 3 (6): 1078–1083. Publisher Full Text APPENDIX A. A COMPLETE REPRODUCIBLE WORKFLOW, FROM A SPECIES LIST TO A PHYLOGENY, AND DISTRIBUTION MAP. (Sheet 1) APPENDIX A. A COMPLETE REPRODUCIBLE WORKFLOW, FROM A SPECIES LIST TO A PHYLOGENY, AND DISTRIBUTION MAP. (Sheet 2) APPENDIX A. A COMPLETE REPRODUCIBLE WORKFLOW, FROM A SPECIES LIST TO A PHYLOGENY, AND DISTRIBUTION MAP. (Sheet 3) APPENDIX A. A COMPLETE REPRODUCIBLE WORKFLOW, FROM A SPECIES LIST TO A PHYLOGENY, AND DISTRIBUTION MAP. (Sheet 4) APPENDIX B. MATCHING SPECIES TABLES WITH DIFFERENT TAXONOMIC RESOLUTION. (Sheet 1) APPENDIX B. MATCHING SPECIES TABLES WITH DIFFERENT TAXONOMIC RESOLUTION. (Sheet 2) APPENDIX B. MATCHING SPECIES TABLES WITH DIFFERENT TAXONOMIC RESOLUTION. (Sheet 3) APPENDIX B. MATCHING SPECIES TABLES WITH DIFFERENT TAXONOMIC RESOLUTION. (Sheet 4) APPENDIX C. INSTALLATION OF THE DEVELOPMENT VERSION OF TAXIZE AND API KEYS. (Sheet 1) APPENDIX C. INSTALLATION OF THE DEVELOPMENT VERSION OF TAXIZE AND API KEYS. (Sheet 2) Comments on this article Comments (0) Version 2 VERSION 2 PUBLISHED 18 Sep 2013 ADD YOUR COMMENT Comment Author details Author details 1 Biology, Simon Fraser University, Burnaby, Canada 2 Institute for Environmental Sciences, University Koblenz-Landau, Landau, Germany Competing interests No competing interests were disclosed. Grant information The author(s) declared that no grants were involved in supporting this work. Article Versions (2) version 2 Published: 28 Oct 2013, 2:191 https://doi.org/10.12688/f1000research.2-191.v2 version 1 Published: 18 Sep 2013, 2:191 https://doi.org/10.12688/f1000research.2-191.v1 Copyright © 2013 Chamberlain SA and Szöcs E. This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Data associated with the article are available under the terms of the Creative Commons Zero "No rights reserved" data waiver (CC0 1.0 Public domain dedication). Download Export To Sciwheel Bibtex EndNote ProCite Ref. Manager (RIS) Sente metrics Views Downloads F1000Research - - PubMed Central info_outline Data from PMC are received and updated monthly. - - Citations open_in_new 0 open_in_new 0 open_in_new SEE MORE DETAILS CITE how to cite this article Chamberlain SA and Szöcs E. taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.12688/f1000research.2-191.v2 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS track receive updates on this article Track an article to receive email alerts on any updates to this article. TRACK THIS ARTICLE Share Open Peer Review Current Reviewer Status: ? Key to Reviewer Statuses VIEW HIDE Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Version 2 VERSION 2 PUBLISHED 28 Oct 2013 Views 0 Cite How to cite this report: Simpson GL. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2194 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2194 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 01 Nov 2013 Gavin L. Simpson , Department of Biology, University of Regina, Regina, SK, Canada Approved VIEWS 0 https://doi.org/10.5256/f1000research.2767.r2194 The author's have addressed my comments on the original version of their manuscript. The issues I pointed to regarding naming conventions were not intended to be addressed now but in a future version of the package. The new appendix is ... Continue reading READ ALL The author's have addressed my comments on the original version of their manuscript. The issues I pointed to regarding naming conventions were not intended to be addressed now but in a future version of the package. The new appendix is a good addition to the manuscript, although I don't fully follow why "open .Rprofile" is highlighted as code? Competing Interests: No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Simpson GL. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2194 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2194 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Author Response 05 Nov 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 05 Nov 2013 Author Response Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott Competing Interests: No competing interests were disclosed. Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott Competing Interests: No competing interests were disclosed. Close Report a concern Respond or Comment COMMENTS ON THIS REPORT Author Response 05 Nov 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 05 Nov 2013 Author Response Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott Competing Interests: No competing interests were disclosed. Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott Competing Interests: No competing interests were disclosed. Close Report a concern COMMENT ON THIS REPORT Views 0 Cite How to cite this report: Pearse W. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2195 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2195 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 29 Oct 2013 Will Pearse , College of Biological Sciences, University of Minnesota, Minneapolis, MN, USA Approved VIEWS 0 https://doi.org/10.5256/f1000research.2767.r2195 The authors have addressed all my concerns, and I think it's perfectly reasonable to address naming conventions in the next release of the package. The third appendix is a particularly nice addition; if the authors intend to alter the manuscript ... Continue reading READ ALL The authors have addressed all my concerns, and I think it's perfectly reasonable to address naming conventions in the next release of the package. The third appendix is a particularly nice addition; if the authors intend to alter the manuscript when they next update the package, the section entitled 'API Keys' may contain a minor typo/area that's not perfectly clear (see below) but I was still able to follow the appendix to alter my .Rprofile. "Navigate to your .Rprofile file, which should be open .Rprofile" Competing Interests: No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Pearse W. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2195 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2195 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Author Response 05 Nov 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 05 Nov 2013 Author Response Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott Competing Interests: No competing interests were disclosed. Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott Competing Interests: No competing interests were disclosed. Close Report a concern Respond or Comment COMMENTS ON THIS REPORT Author Response 05 Nov 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 05 Nov 2013 Author Response Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott Competing Interests: No competing interests were disclosed. Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott Competing Interests: No competing interests were disclosed. Close Report a concern COMMENT ON THIS REPORT Views 0 Cite How to cite this report: White E. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2196 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2196 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 28 Oct 2013 Ethan White , Department of Biology, Utah State University, Logan, UT, USA Approved VIEWS 0 https://doi.org/10.5256/f1000research.2767.r2196 The current version of the manuscript addresses all of the recommendations in my previous review. ... Continue reading READ ALL The current version of the manuscript addresses all of the recommendations in my previous review. I look forward to seeing the in-progress improvements in the software in its next release. Competing Interests: No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT White E. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2196 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2196 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Author Response 05 Nov 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 05 Nov 2013 Author Response Thanks for your constructive comments Ethan. - Scott Competing Interests: No competing interests were disclosed. Thanks for your constructive comments Ethan. - Scott Thanks for your constructive comments Ethan. - Scott Competing Interests: No competing interests were disclosed. Close Report a concern Respond or Comment COMMENTS ON THIS REPORT Author Response 05 Nov 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 05 Nov 2013 Author Response Thanks for your constructive comments Ethan. - Scott Competing Interests: No competing interests were disclosed. Thanks for your constructive comments Ethan. - Scott Thanks for your constructive comments Ethan. - Scott Competing Interests: No competing interests were disclosed. Close Report a concern COMMENT ON THIS REPORT Version 1 VERSION 1 PUBLISHED 18 Sep 2013 Views 0 Cite How to cite this report: White E. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1853 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1853 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 24 Sep 2013 Ethan White , Department of Biology, Utah State University, Logan, UT, USA Approved VIEWS 0 https://doi.org/10.5256/f1000research.2227.r1853 This software paper describes an R package that provides an integrated R interface for the APIs of over a dozen taxonomically related web services. This is a valuable contribution because it will save researchers time and energy (for those capable ... Continue reading READ ALL This software paper describes an R package that provides an integrated R interface for the APIs of over a dozen taxonomically related web services. This is a valuable contribution because it will save researchers time and energy (for those capable of wrapping the APIs themselves), and will allow scientists who lack the technical knowledge to interact with web services themselves to use this data from R. In addition, some of the functions combine existing APIs in useful ways. The software was developed using version control, on a public development site (https://github.com/ropensci/taxize_), and using a bug tracker. The code is well modularized and includes an extensive test suite. This level of good software practice is notable for scientific software and is indicative of well built and maintained code. It also has a clearly declared CC0 license making it easy for others to use and build on the software. The software installed easily in R using the standard approach and generally works as expected based on the examples in the paper and on the project's website. My one major suggestion is to reinforce what the authors' have already suggested in the Conclusions, that it would be an improvement to move to a design that focuses on having a single top-level function for each type of task that the library handles with different data sources being selected using a parameter. This would allow the users to benefit maximally from one of the stronger aspects of this library, which is that it combines access to large numbers of data sources, by making it more of an integrated system and less of a collected set of API wrappers. Minor issues: The code snippets are images rather than text. This is probably a limitation of the publishing platform, but it does make it more difficult to learn about the software by executing the code snippets. The following two sentences seem rather tangential to the paper and could be removed: "Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier." Given that many of the target users of this package will not be particularly familiar with web services and APIs, I would recommend adding another sentence or two to the paragraph on authentication so that readers understand why this is required (i.e., most readers won't understand " users that abuse the API ") and what it really is (i.e., an individual login of sorts, similar to a username/password). The section on "Aggregating data to a specific taxonomic rank" refers to an example, but none appears to be present. Competing Interests: No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT White E. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1853 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1853 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Author Response 14 Oct 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 14 Oct 2013 Author Response We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become ... Continue reading We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier ." In response to this reviewer's comment about clarification on APIs and authentication, and Dr. Pearse's comments on the same issue, we have added a new appendix (Appendix C) that explains how to use API keys and install the development version of taxize. This reviewer commented that the section on Aggregating data to a specific taxonomic rank referred to an example, but none appeared to be present. The example is now in the paper. We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier ." In response to this reviewer's comment about clarification on APIs and authentication, and Dr. Pearse's comments on the same issue, we have added a new appendix (Appendix C) that explains how to use API keys and install the development version of taxize. This reviewer commented that the section on Aggregating data to a specific taxonomic rank referred to an example, but none appeared to be present. The example is now in the paper. Competing Interests: No competing interests were disclosed. Close Report a concern Respond or Comment COMMENTS ON THIS REPORT Author Response 14 Oct 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 14 Oct 2013 Author Response We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become ... Continue reading We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier ." In response to this reviewer's comment about clarification on APIs and authentication, and Dr. Pearse's comments on the same issue, we have added a new appendix (Appendix C) that explains how to use API keys and install the development version of taxize. This reviewer commented that the section on Aggregating data to a specific taxonomic rank referred to an example, but none appeared to be present. The example is now in the paper. We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier ." In response to this reviewer's comment about clarification on APIs and authentication, and Dr. Pearse's comments on the same issue, we have added a new appendix (Appendix C) that explains how to use API keys and install the development version of taxize. This reviewer commented that the section on Aggregating data to a specific taxonomic rank referred to an example, but none appeared to be present. The example is now in the paper. Competing Interests: No competing interests were disclosed. Close Report a concern COMMENT ON THIS REPORT Views 0 Cite How to cite this report: Simpson GL. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1854 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1854 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 23 Sep 2013 Gavin L. Simpson , Department of Biology, University of Regina, Regina, SK, Canada Approved VIEWS 0 https://doi.org/10.5256/f1000research.2227.r1854 Chamberlain and Szöcs present the taxize R package, a set of functions that provides interfaces to several web tools and databases, and simplifies the process of checking, updating, correcting and manipulating taxon names for researchers working with ecological/biological data. A ... Continue reading READ ALL Chamberlain and Szöcs present the taxize R package, a set of functions that provides interfaces to several web tools and databases, and simplifies the process of checking, updating, correcting and manipulating taxon names for researchers working with ecological/biological data. A key feature that is repeated throughout is the need for reproducibility of science workflows and taxize provides a means to achieve this within the R software ecosystem for taxonomic search. The manuscript is well-written and nicely presented, with a good balance of descriptive text and discourse and practical illustration of package usage. A number of examples illustrate the scope of the package, something that is fully expanded upon in the two appendices, which are a welcome addition to the paper. As to the package, I am not overly fond of long function names; the authors should consider dropping the data source abbreviations from the function names in a future update/revision of the package. Likewise there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. One advantage of taxize is that it draws together a rich selection of data stores to query. A further suggestion for a future update would be to add generic function names, that apply to a database connection/information object. The latter would describe the resource the user wants to search and any other required information, such as the API key, etc., for example: foo <- taxizeDB(what = "uBio", key = "1646546164694") The user function to search would then be 'search(foo, "Abies")'. Similar generically named functions would provide the primary user-interface, thus promoting a more consistent toolbox at the R level. This will become increasingly relevant as the scope of taxize increases through the addition of new data stores that the package can access. In terms of presentation in the paper, I really don't like the way the R code inputs merge with the R outputs. I know the author of Knitr doesn't like the demarcation of output being polluted by the R prompt, but I do find it difficult parsing the inputs/outputs you show because often there is no space between them and users not familiar with R will have greater difficulties than I. Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. Related, in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. Note also, the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. As the package is revised and developed, consider this and other aspects of providing a consistent presentation to the user. I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be " Helianthus annuus " or " Helianthus annus "? In the 'mynames' definition you include ' Helianthus annuus ' in the character vector but the output shown suggests that the submitted name was ' Helianthus annus ' (1 "u") in rows with rownames 9 and 10 in the output shown. Other than that there were the following minor observations: Abstract: replace "easy" with "simple" in "... fashion that's easy ...", and move the details about availability and the URI to the end of the sentence. Page 2, Column 1, Paragraph 2: You have " I n addition, there is no one authoritative taxonomic names source ...", which is a little clumsy to read. How about " In addition, there is no one authoritative source of taxonomic names ..."? Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Pg 2, C2, P6: Change " and more can easily be added " to " and more can be easily added " seems to flow better? Pg 5, paragraph above Figure 1: You refer to converting the object to an **ape** *phylo* object and then repeat essentially the same information in the next sentence. Remove the repetition. Pg 6, C1: The header may be better as " Which taxa are children of the taxon of interest ". Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Pg 7: The first sentence of "Aggregating data...." reads " In biology, one can asks questions ...". It should be " one ask s" or " one can ask ". Pg 7, Conclusions: The first sentence reads " information is increasingly sought out by biologists ". I would drop "out" as "sought" is sufficient on its own. Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points. Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. Competing Interests: No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Simpson GL. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1854 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1854 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Author Response 14 Oct 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 14 Oct 2013 Author Response We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there ... Continue reading We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. We agree that we should definitely improve naming conventions for functions. However, we think it's better to change the function names as needed in an upcoming version of the software after we have had time work on the problem. - Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. We have used comments (pound signs) for the results of function calls within each code block to indicate output as separate from code input. This way users can copy/paste code directly into R to try it out. - in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. This was a problem with the typesetting, and we have fixed it. - the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. We agree that we should definitely improve naming conventions for object columns. However, we think it's better to change the column names as needed in an upcoming version of the software after we have had time work on the problem. - I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be "Helianthus annuus" or "Helianthus annus"? In the 'mynames' definition you include 'Helianthus annuus' in the character vector but the output shown suggests that the submitted name was 'Helianthus annus' (1 "u") in rows with rownames 9 and 10 in the output shown. Fixed. - Abstract: replace "easy" with "simple" in "...fashion that's easy...", and move the details about availability and the URI to the end of the sentence. Fixed. - Page 2, Column 1, Paragraph 2: You have "In addition, there is no one authoritative taxonomic names source...", which is a little clumsy to read. How about "In addition, there is no one authoritative source of taxonomic names..."? Changed. - Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Changed. - Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Changed. - Pg 2, C2, P6: Change "and more can easily be added" to "and more can be easily added" seems to flow better? Changed. - Pg 5, paragraph above Figure 1: You refer to converting the object to an ape phylo object and then repeat essentially the same information in the next sentence. Remove the repetition. Removed. - Pg 6, C1: The header may be better as "Which taxa are children of the taxon of interest". Changed. - Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Fixed. - Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Changed. - Pg 7: The first sentence of "Aggregating data...." reads "In biology, one can asks questions...". It should be "one asks" or "one can ask" Changed. - Pg 7, Conclusions: The first sentence reads "information is increasingly sought out by biologists". I would drop "out" as "sought" is sufficient on its own. Changed. - Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. Fixed. - On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points . Although we agree that the styling of the figure could be improved, we are going to leave it as is because it's not important for understanding the material. - Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. A scale could be used for sure. However, our focus is on showing readers that they can get data which can be used to make a phylogeny, not on how to properly create and display a phylogeny. Thus, we are leaving the phylogeny as is without a scale. We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. We agree that we should definitely improve naming conventions for functions. However, we think it's better to change the function names as needed in an upcoming version of the software after we have had time work on the problem. - Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. We have used comments (pound signs) for the results of function calls within each code block to indicate output as separate from code input. This way users can copy/paste code directly into R to try it out. - in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. This was a problem with the typesetting, and we have fixed it. - the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. We agree that we should definitely improve naming conventions for object columns. However, we think it's better to change the column names as needed in an upcoming version of the software after we have had time work on the problem. - I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be "Helianthus annuus" or "Helianthus annus"? In the 'mynames' definition you include 'Helianthus annuus' in the character vector but the output shown suggests that the submitted name was 'Helianthus annus' (1 "u") in rows with rownames 9 and 10 in the output shown. Fixed. - Abstract: replace "easy" with "simple" in "...fashion that's easy...", and move the details about availability and the URI to the end of the sentence. Fixed. - Page 2, Column 1, Paragraph 2: You have "In addition, there is no one authoritative taxonomic names source...", which is a little clumsy to read. How about "In addition, there is no one authoritative source of taxonomic names..."? Changed. - Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Changed. - Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Changed. - Pg 2, C2, P6: Change "and more can easily be added" to "and more can be easily added" seems to flow better? Changed. - Pg 5, paragraph above Figure 1: You refer to converting the object to an ape phylo object and then repeat essentially the same information in the next sentence. Remove the repetition. Removed. - Pg 6, C1: The header may be better as "Which taxa are children of the taxon of interest". Changed. - Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Fixed. - Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Changed. - Pg 7: The first sentence of "Aggregating data...." reads "In biology, one can asks questions...". It should be "one asks" or "one can ask" Changed. - Pg 7, Conclusions: The first sentence reads "information is increasingly sought out by biologists". I would drop "out" as "sought" is sufficient on its own. Changed. - Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. Fixed. - On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points . Although we agree that the styling of the figure could be improved, we are going to leave it as is because it's not important for understanding the material. - Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. A scale could be used for sure. However, our focus is on showing readers that they can get data which can be used to make a phylogeny, not on how to properly create and display a phylogeny. Thus, we are leaving the phylogeny as is without a scale. Competing Interests: No competing interests were disclosed. Close Report a concern Respond or Comment COMMENTS ON THIS REPORT Author Response 14 Oct 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 14 Oct 2013 Author Response We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there ... Continue reading We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. We agree that we should definitely improve naming conventions for functions. However, we think it's better to change the function names as needed in an upcoming version of the software after we have had time work on the problem. - Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. We have used comments (pound signs) for the results of function calls within each code block to indicate output as separate from code input. This way users can copy/paste code directly into R to try it out. - in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. This was a problem with the typesetting, and we have fixed it. - the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. We agree that we should definitely improve naming conventions for object columns. However, we think it's better to change the column names as needed in an upcoming version of the software after we have had time work on the problem. - I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be "Helianthus annuus" or "Helianthus annus"? In the 'mynames' definition you include 'Helianthus annuus' in the character vector but the output shown suggests that the submitted name was 'Helianthus annus' (1 "u") in rows with rownames 9 and 10 in the output shown. Fixed. - Abstract: replace "easy" with "simple" in "...fashion that's easy...", and move the details about availability and the URI to the end of the sentence. Fixed. - Page 2, Column 1, Paragraph 2: You have "In addition, there is no one authoritative taxonomic names source...", which is a little clumsy to read. How about "In addition, there is no one authoritative source of taxonomic names..."? Changed. - Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Changed. - Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Changed. - Pg 2, C2, P6: Change "and more can easily be added" to "and more can be easily added" seems to flow better? Changed. - Pg 5, paragraph above Figure 1: You refer to converting the object to an ape phylo object and then repeat essentially the same information in the next sentence. Remove the repetition. Removed. - Pg 6, C1: The header may be better as "Which taxa are children of the taxon of interest". Changed. - Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Fixed. - Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Changed. - Pg 7: The first sentence of "Aggregating data...." reads "In biology, one can asks questions...". It should be "one asks" or "one can ask" Changed. - Pg 7, Conclusions: The first sentence reads "information is increasingly sought out by biologists". I would drop "out" as "sought" is sufficient on its own. Changed. - Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. Fixed. - On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points . Although we agree that the styling of the figure could be improved, we are going to leave it as is because it's not important for understanding the material. - Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. A scale could be used for sure. However, our focus is on showing readers that they can get data which can be used to make a phylogeny, not on how to properly create and display a phylogeny. Thus, we are leaving the phylogeny as is without a scale. We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. We agree that we should definitely improve naming conventions for functions. However, we think it's better to change the function names as needed in an upcoming version of the software after we have had time work on the problem. - Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. We have used comments (pound signs) for the results of function calls within each code block to indicate output as separate from code input. This way users can copy/paste code directly into R to try it out. - in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. This was a problem with the typesetting, and we have fixed it. - the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. We agree that we should definitely improve naming conventions for object columns. However, we think it's better to change the column names as needed in an upcoming version of the software after we have had time work on the problem. - I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be "Helianthus annuus" or "Helianthus annus"? In the 'mynames' definition you include 'Helianthus annuus' in the character vector but the output shown suggests that the submitted name was 'Helianthus annus' (1 "u") in rows with rownames 9 and 10 in the output shown. Fixed. - Abstract: replace "easy" with "simple" in "...fashion that's easy...", and move the details about availability and the URI to the end of the sentence. Fixed. - Page 2, Column 1, Paragraph 2: You have "In addition, there is no one authoritative taxonomic names source...", which is a little clumsy to read. How about "In addition, there is no one authoritative source of taxonomic names..."? Changed. - Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Changed. - Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Changed. - Pg 2, C2, P6: Change "and more can easily be added" to "and more can be easily added" seems to flow better? Changed. - Pg 5, paragraph above Figure 1: You refer to converting the object to an ape phylo object and then repeat essentially the same information in the next sentence. Remove the repetition. Removed. - Pg 6, C1: The header may be better as "Which taxa are children of the taxon of interest". Changed. - Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Fixed. - Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Changed. - Pg 7: The first sentence of "Aggregating data...." reads "In biology, one can asks questions...". It should be "one asks" or "one can ask" Changed. - Pg 7, Conclusions: The first sentence reads "information is increasingly sought out by biologists". I would drop "out" as "sought" is sufficient on its own. Changed. - Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. Fixed. - On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points . Although we agree that the styling of the figure could be improved, we are going to leave it as is because it's not important for understanding the material. - Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. A scale could be used for sure. However, our focus is on showing readers that they can get data which can be used to make a phylogeny, not on how to properly create and display a phylogeny. Thus, we are leaving the phylogeny as is without a scale. Competing Interests: No competing interests were disclosed. Close Report a concern COMMENT ON THIS REPORT Views 0 Cite How to cite this report: Pearse W. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1855 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1855 NOTE: it is important to ensure the information in square brackets after the title is included in this citation. Close Copy Citation Details Reviewer Report 19 Sep 2013 Will Pearse , College of Biological Sciences, University of Minnesota, Minneapolis, MN, USA Approved VIEWS 0 https://doi.org/10.5256/f1000research.2227.r1855 The software this article describes is well-written and of use to ecologists. The guide and appendices in this article give a good overview of the features of the package, and are well-written. The title and abstract are well-written. My only serious ... Continue reading READ ALL The software this article describes is well-written and of use to ecologists. The guide and appendices in this article give a good overview of the features of the package, and are well-written. The title and abstract are well-written. My only serious comment would be that the authors refer to species' taxonomy as if it perfectly reflects species' phylogeny (e.g. the end of the first paragraph in the introduction and the first paragraph in the section "retrieve higher taxonomic names"). More often than not, taxonomy does reflect phylogeny, but a sentence clarifying this distinction somewhere might be helpful. A few minor things: Table 1 - "National Center for Biotechnology Information Federhen" - the author's surname, but not the citation, is in the text; "searchbycommonname" and "searchbyscientificname" seem to be the only elements not in alphabetical order in the table. Phylomatic can now create phylogenies for mammals, not just angiosperms (e.g. "retrieve a phylogeny"). Some sentences could perhaps be linked more neatly in the introduction (e.g. " gives that name as unresolved. But Helianthus ", " moved to the cloud. Therefore there is a need ", " additional confusion. Last, name "). Similarly, page 3 has some very short paragraphs; could the descriptions of taxonstand and The Plant List be moved to table 1? "Science workflows" or "scientific workflows" (fourth paragraph of introduction)? These are all very minor points! Perhaps an example of what to type in order to add API keys into the .Rprofile would be helpful, or maybe could just be added to the help file for " ubio_namebank " as this is the function named when it's mentioned. Competing Interests: No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. Close READ LESS CITE CITE HOW TO CITE THIS REPORT Pearse W. Reviewer Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1855 ) The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1855 NOTE: it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS Report a concern Author Response 14 Oct 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 14 Oct 2013 Author Response We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although ... Continue reading We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although taxonomic classifications are human constructs created to understand the real phylogeny of life \cite{benton2000}, they are nonetheless essential to organize the vast diversity of organisms ." We fixed the citation in Table 1, and reordered the functions in the table so as to be alphabetical. Thanks for pointing out that Phylomatic now accepts mammals in addition to Angiosperm plants - we have adjusted the language accordingly. We removed the description of Taxonstand and the Plantlist.org (and associated references) that this reviewer referred to as it wasn't necessary and improves reading. This reviewer asked for a better explanation of how to use the API keys and the .Rprofile file. In response, we have added a new appendix (Appendix C) that explains using API keys and installing the development version of taxize. We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although taxonomic classifications are human constructs created to understand the real phylogeny of life \cite{benton2000}, they are nonetheless essential to organize the vast diversity of organisms ." We fixed the citation in Table 1, and reordered the functions in the table so as to be alphabetical. Thanks for pointing out that Phylomatic now accepts mammals in addition to Angiosperm plants - we have adjusted the language accordingly. We removed the description of Taxonstand and the Plantlist.org (and associated references) that this reviewer referred to as it wasn't necessary and improves reading. This reviewer asked for a better explanation of how to use the API keys and the .Rprofile file. In response, we have added a new appendix (Appendix C) that explains using API keys and installing the development version of taxize. Competing Interests: No competing interests were disclosed. Close Report a concern Respond or Comment COMMENTS ON THIS REPORT Author Response 14 Oct 2013 Scott Chamberlain , Biology, Simon Fraser University, Burnaby, Canada 14 Oct 2013 Author Response We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although ... Continue reading We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although taxonomic classifications are human constructs created to understand the real phylogeny of life \cite{benton2000}, they are nonetheless essential to organize the vast diversity of organisms ." We fixed the citation in Table 1, and reordered the functions in the table so as to be alphabetical. Thanks for pointing out that Phylomatic now accepts mammals in addition to Angiosperm plants - we have adjusted the language accordingly. We removed the description of Taxonstand and the Plantlist.org (and associated references) that this reviewer referred to as it wasn't necessary and improves reading. This reviewer asked for a better explanation of how to use the API keys and the .Rprofile file. In response, we have added a new appendix (Appendix C) that explains using API keys and installing the development version of taxize. We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although taxonomic classifications are human constructs created to understand the real phylogeny of life \cite{benton2000}, they are nonetheless essential to organize the vast diversity of organisms ." We fixed the citation in Table 1, and reordered the functions in the table so as to be alphabetical. Thanks for pointing out that Phylomatic now accepts mammals in addition to Angiosperm plants - we have adjusted the language accordingly. We removed the description of Taxonstand and the Plantlist.org (and associated references) that this reviewer referred to as it wasn't necessary and improves reading. This reviewer asked for a better explanation of how to use the API keys and the .Rprofile file. In response, we have added a new appendix (Appendix C) that explains using API keys and installing the development version of taxize. Competing Interests: No competing interests were disclosed. Close Report a concern COMMENT ON THIS REPORT Comments on this article Comments (0) Version 2 VERSION 2 PUBLISHED 18 Sep 2013 ADD YOUR COMMENT Comment keyboard_arrow_left keyboard_arrow_right Open Peer Review Reviewer Status info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Reviewer Reports Invited Reviewers 1 2 3 Version 2 (update) 28 Oct 13 read read read Version 1 18 Sep 13 read read read Will Pearse , University of Minnesota, Minneapolis, MN, USA Gavin L. Simpson , University of Regina, Regina, SK, Canada Ethan White , Utah State University, Logan, UT, USA Comments on this article All Comments (0) Add a comment Sign up for content alerts Sign Up You are now signed up to receive this alert Browse by related subjects keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2013 Simpson G. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 01 Nov 2013 | for Version 2 Gavin L. Simpson , Department of Biology, University of Regina, Regina, SK, Canada 0 Views copyright © 2013 Simpson G. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (1) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions The author's have addressed my comments on the original version of their manuscript. The issues I pointed to regarding naming conventions were not intended to be addressed now but in a future version of the package. The new appendix is a good addition to the manuscript, although I don't fully follow why "open .Rprofile" is highlighted as code? Competing Interests No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (1) Author Response 05 Nov 2013 Scott Chamberlain, Biology, Simon Fraser University, Burnaby, Canada Thanks for the feedback Gavin. Good point that the line "open .Rprofile" should not be highlighted as code. I will see if we can fix that. - Scott View more View less Competing Interests No competing interests were disclosed. reply Respond Report a concern Simpson GL. Peer Review Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2194) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2194 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2013 Pearse W. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 29 Oct 2013 | for Version 2 Will Pearse , College of Biological Sciences, University of Minnesota, Minneapolis, MN, USA 0 Views copyright © 2013 Pearse W. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (1) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions The authors have addressed all my concerns, and I think it's perfectly reasonable to address naming conventions in the next release of the package. The third appendix is a particularly nice addition; if the authors intend to alter the manuscript when they next update the package, the section entitled 'API Keys' may contain a minor typo/area that's not perfectly clear (see below) but I was still able to follow the appendix to alter my .Rprofile. "Navigate to your .Rprofile file, which should be open .Rprofile" Competing Interests No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (1) Author Response 05 Nov 2013 Scott Chamberlain, Biology, Simon Fraser University, Burnaby, Canada Thanks for your comments Will. Gavin mentioned something about the open .Rprofile as well, and we will fix anything there. - Scott View more View less Competing Interests No competing interests were disclosed. reply Respond Report a concern Pearse W. Peer Review Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2195) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2195 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2013 White E. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 28 Oct 2013 | for Version 2 Ethan White , Department of Biology, Utah State University, Logan, UT, USA 0 Views copyright © 2013 White E. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (1) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions The current version of the manuscript addresses all of the recommendations in my previous review. I look forward to seeing the in-progress improvements in the software in its next release. Competing Interests No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (1) Author Response 05 Nov 2013 Scott Chamberlain, Biology, Simon Fraser University, Burnaby, Canada Thanks for your constructive comments Ethan. - Scott View more View less Competing Interests No competing interests were disclosed. reply Respond Report a concern White E. Peer Review Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2767.r2196) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/2-191/v2#referee-response-2196 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2013 White E. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 24 Sep 2013 | for Version 1 Ethan White , Department of Biology, Utah State University, Logan, UT, USA 0 Views copyright © 2013 White E. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (1) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions This software paper describes an R package that provides an integrated R interface for the APIs of over a dozen taxonomically related web services. This is a valuable contribution because it will save researchers time and energy (for those capable of wrapping the APIs themselves), and will allow scientists who lack the technical knowledge to interact with web services themselves to use this data from R. In addition, some of the functions combine existing APIs in useful ways. The software was developed using version control, on a public development site (https://github.com/ropensci/taxize_), and using a bug tracker. The code is well modularized and includes an extensive test suite. This level of good software practice is notable for scientific software and is indicative of well built and maintained code. It also has a clearly declared CC0 license making it easy for others to use and build on the software. The software installed easily in R using the standard approach and generally works as expected based on the examples in the paper and on the project's website. My one major suggestion is to reinforce what the authors' have already suggested in the Conclusions, that it would be an improvement to move to a design that focuses on having a single top-level function for each type of task that the library handles with different data sources being selected using a parameter. This would allow the users to benefit maximally from one of the stronger aspects of this library, which is that it combines access to large numbers of data sources, by making it more of an integrated system and less of a collected set of API wrappers. Minor issues: The code snippets are images rather than text. This is probably a limitation of the publishing platform, but it does make it more difficult to learn about the software by executing the code snippets. The following two sentences seem rather tangential to the paper and could be removed: "Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier." Given that many of the target users of this package will not be particularly familiar with web services and APIs, I would recommend adding another sentence or two to the paragraph on authentication so that readers understand why this is required (i.e., most readers won't understand " users that abuse the API ") and what it really is (i.e., an individual login of sorts, similar to a username/password). The section on "Aggregating data to a specific taxonomic rank" refers to an example, but none appears to be present. Competing Interests No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (1) Author Response 14 Oct 2013 Scott Chamberlain, Biology, Simon Fraser University, Burnaby, Canada We appreciate Dr. White's comments on our manuscript. We removed the sentences " Science workflows can now easily incorporate text, code, and images in a single executable document. Reproducible documents should become mainstream in biology to avoid mistakes, and make collaboration easier ." In response to this reviewer's comment about clarification on APIs and authentication, and Dr. Pearse's comments on the same issue, we have added a new appendix (Appendix C) that explains how to use API keys and install the development version of taxize. This reviewer commented that the section on Aggregating data to a specific taxonomic rank referred to an example, but none appeared to be present. The example is now in the paper. View more View less Competing Interests No competing interests were disclosed. reply Respond Report a concern White E. Peer Review Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1853) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1853 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2013 Simpson G. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 23 Sep 2013 | for Version 1 Gavin L. Simpson , Department of Biology, University of Regina, Regina, SK, Canada 0 Views copyright © 2013 Simpson G. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (1) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Chamberlain and Szöcs present the taxize R package, a set of functions that provides interfaces to several web tools and databases, and simplifies the process of checking, updating, correcting and manipulating taxon names for researchers working with ecological/biological data. A key feature that is repeated throughout is the need for reproducibility of science workflows and taxize provides a means to achieve this within the R software ecosystem for taxonomic search. The manuscript is well-written and nicely presented, with a good balance of descriptive text and discourse and practical illustration of package usage. A number of examples illustrate the scope of the package, something that is fully expanded upon in the two appendices, which are a welcome addition to the paper. As to the package, I am not overly fond of long function names; the authors should consider dropping the data source abbreviations from the function names in a future update/revision of the package. Likewise there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. One advantage of taxize is that it draws together a rich selection of data stores to query. A further suggestion for a future update would be to add generic function names, that apply to a database connection/information object. The latter would describe the resource the user wants to search and any other required information, such as the API key, etc., for example: foo <- taxizeDB(what = "uBio", key = "1646546164694") The user function to search would then be 'search(foo, "Abies")'. Similar generically named functions would provide the primary user-interface, thus promoting a more consistent toolbox at the R level. This will become increasingly relevant as the scope of taxize increases through the addition of new data stores that the package can access. In terms of presentation in the paper, I really don't like the way the R code inputs merge with the R outputs. I know the author of Knitr doesn't like the demarcation of output being polluted by the R prompt, but I do find it difficult parsing the inputs/outputs you show because often there is no space between them and users not familiar with R will have greater difficulties than I. Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. Related, in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. Note also, the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. As the package is revised and developed, consider this and other aspects of providing a consistent presentation to the user. I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be " Helianthus annuus " or " Helianthus annus "? In the 'mynames' definition you include ' Helianthus annuus ' in the character vector but the output shown suggests that the submitted name was ' Helianthus annus ' (1 "u") in rows with rownames 9 and 10 in the output shown. Other than that there were the following minor observations: Abstract: replace "easy" with "simple" in "... fashion that's easy ...", and move the details about availability and the URI to the end of the sentence. Page 2, Column 1, Paragraph 2: You have " I n addition, there is no one authoritative taxonomic names source ...", which is a little clumsy to read. How about " In addition, there is no one authoritative source of taxonomic names ..."? Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Pg 2, C2, P6: Change " and more can easily be added " to " and more can be easily added " seems to flow better? Pg 5, paragraph above Figure 1: You refer to converting the object to an **ape** *phylo* object and then repeat essentially the same information in the next sentence. Remove the repetition. Pg 6, C1: The header may be better as " Which taxa are children of the taxon of interest ". Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Pg 7: The first sentence of "Aggregating data...." reads " In biology, one can asks questions ...". It should be " one ask s" or " one can ask ". Pg 7, Conclusions: The first sentence reads " information is increasingly sought out by biologists ". I would drop "out" as "sought" is sufficient on its own. Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points. Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. Competing Interests No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (1) Author Response 14 Oct 2013 Scott Chamberlain, Biology, Simon Fraser University, Burnaby, Canada We appreciate Dr. Simpson's very thorough comments on our manuscript. The following are responses to Dr. Simpson's comments: - ...there is some inconsistency in the naming conventions used. For example there is the 'tpl_search()' function to search The Plant List, but the equivalent function to search uBio is 'ubio_namebank()'. Whilst this may reflect specific aspects of terminology in use at the respective data stores, it does not help the user gain familiarity with the package by having them remember inconsistent function names. We agree that we should definitely improve naming conventions for functions. However, we think it's better to change the function names as needed in an upcoming version of the software after we have had time work on the problem. - Consider adding in more conventional indications of R outputs, or physically separate input from output by breaking up the chunks of code to have whitespace between the grey-background chunks. We have used comments (pound signs) for the results of function calls within each code block to indicate output as separate from code input. This way users can copy/paste code directly into R to try it out. - in one location I noticed something amiss with the layout; in the first code block at the top of page 5, the printed output looks wrong here. I would expect the attributes to print on their own line and the data in the attribute to also be on its own separate line. This was a problem with the typesetting, and we have fixed it. - the inconsistency in the naming of the output object columns. For example, in the two code chunks shown in column 1 of page 4, the first block has an object printed with column names 'matched_name' and 'data_source_title', whilst camelCase is used in the outputs shown in the second block. We agree that we should definitely improve naming conventions for object columns. However, we think it's better to change the column names as needed in an upcoming version of the software after we have had time work on the problem. - I was a little confused about the example in the section Resolve Taxonomic Names on page 4. Should the taxon name be "Helianthus annuus" or "Helianthus annus"? In the 'mynames' definition you include 'Helianthus annuus' in the character vector but the output shown suggests that the submitted name was 'Helianthus annus' (1 "u") in rows with rownames 9 and 10 in the output shown. Fixed. - Abstract: replace "easy" with "simple" in "...fashion that's easy...", and move the details about availability and the URI to the end of the sentence. Fixed. - Page 2, Column 1, Paragraph 2: You have "In addition, there is no one authoritative taxonomic names source...", which is a little clumsy to read. How about "In addition, there is no one authoritative source of taxonomic names..."? Changed. - Pg 2, C1, P2-3: The abbreviated data sources are presented first (in paragraph 2) and subsequently defined (in para 3). Restructure this so that the abbreviated forms are explained upon first usage. Changed. - Pg 2, C2, P2: Most R packages are "in development" so I would drop the qualifier and reword the opening sentence of the paragraph. Changed. - Pg 2, C2, P6: Change "and more can easily be added" to "and more can be easily added" seems to flow better? Changed. - Pg 5, paragraph above Figure 1: You refer to converting the object to an ape phylo object and then repeat essentially the same information in the next sentence. Remove the repetition. Removed. - Pg 6, C1: The header may be better as "Which taxa are children of the taxon of interest". Changed. - Pg 6: In the section "IUCN status", the term "we" is used to refer to both the authors and the user. This is confusing. Reserve "we" for reference to the authors and use something else ("a user" perhaps) for the other instances. Check this throughout the entire manuscript. Fixed. - Pg 6, C2: in the paragraph immediately below the 'grep()' for "RAG1", two consecutive sentences begin with "However". Changed. - Pg 7: The first sentence of "Aggregating data...." reads "In biology, one can asks questions...". It should be "one asks" or "one can ask" Changed. - Pg 7, Conclusions: The first sentence reads "information is increasingly sought out by biologists". I would drop "out" as "sought" is sufficient on its own. Changed. - Appendices: Should the two figures in the Appendices have a different reference to differentiate them from Figure 1 in the main body of the paper? As it stands, the paper has two Figure 1s, one on page 5 and a second on page 12 in the Appendix. Fixed. - On Appendix Figure 2: The individual points are a little large. Consider reducing the plotting character size. I appreciate the effect you were going for with the transparency indicating density of observation through overplotting, but the effect is weakened by the size of the individual points . Although we agree that the styling of the figure could be improved, we are going to leave it as is because it's not important for understanding the material. - Should the phylogenetic trees have some scale to them? I presume the height of the stems is an indication of phylogenetic distance but the figure is hard to calibrate without an associated scale. A quick look at Paradis (2012) Analysis of Phylogenetics and Evolution with R would suggest however that a scale is not consistently applied to these trees. I am happy to be guided by the authors as they will be more familiar with the conventions than I. A scale could be used for sure. However, our focus is on showing readers that they can get data which can be used to make a phylogeny, not on how to properly create and display a phylogeny. Thus, we are leaving the phylogeny as is without a scale. View more View less Competing Interests No competing interests were disclosed. reply Respond Report a concern Simpson GL. Peer Review Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1854) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1854 keyboard_arrow_left Back to all reports Reviewer Report 0 Views copyright © 2013 Pearse W. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. 19 Sep 2013 | for Version 1 Will Pearse , College of Biological Sciences, University of Minnesota, Minneapolis, MN, USA 0 Views copyright © 2013 Pearse W. This is an open access peer review report distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. format_quote Cite this report speaker_notes Responses (1) Approved info_outline Alongside their report, reviewers assign a status to the article: Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions The software this article describes is well-written and of use to ecologists. The guide and appendices in this article give a good overview of the features of the package, and are well-written. The title and abstract are well-written. My only serious comment would be that the authors refer to species' taxonomy as if it perfectly reflects species' phylogeny (e.g. the end of the first paragraph in the introduction and the first paragraph in the section "retrieve higher taxonomic names"). More often than not, taxonomy does reflect phylogeny, but a sentence clarifying this distinction somewhere might be helpful. A few minor things: Table 1 - "National Center for Biotechnology Information Federhen" - the author's surname, but not the citation, is in the text; "searchbycommonname" and "searchbyscientificname" seem to be the only elements not in alphabetical order in the table. Phylomatic can now create phylogenies for mammals, not just angiosperms (e.g. "retrieve a phylogeny"). Some sentences could perhaps be linked more neatly in the introduction (e.g. " gives that name as unresolved. But Helianthus ", " moved to the cloud. Therefore there is a need ", " additional confusion. Last, name "). Similarly, page 3 has some very short paragraphs; could the descriptions of taxonstand and The Plant List be moved to table 1? "Science workflows" or "scientific workflows" (fourth paragraph of introduction)? These are all very minor points! Perhaps an example of what to type in order to add API keys into the .Rprofile would be helpful, or maybe could just be added to the help file for " ubio_namebank " as this is the function named when it's mentioned. Competing Interests No competing interests were disclosed. I confirm that I have read this submission and believe that I have an appropriate level of expertise to confirm that it is of an acceptable scientific standard. reply Respond to this report Responses (1) Author Response 14 Oct 2013 Scott Chamberlain, Biology, Simon Fraser University, Burnaby, Canada We appreciate Dr. Pearse's comments on our manuscript. We agree that species taxonomy does not equate to phylogenetic history, so we added the following sentence to the first paragraph: "Although taxonomic classifications are human constructs created to understand the real phylogeny of life \cite{benton2000}, they are nonetheless essential to organize the vast diversity of organisms ." We fixed the citation in Table 1, and reordered the functions in the table so as to be alphabetical. Thanks for pointing out that Phylomatic now accepts mammals in addition to Angiosperm plants - we have adjusted the language accordingly. We removed the description of Taxonstand and the Plantlist.org (and associated references) that this reviewer referred to as it wasn't necessary and improves reading. This reviewer asked for a better explanation of how to use the API keys and the .Rprofile file. In response, we have added a new appendix (Appendix C) that explains using API keys and installing the development version of taxize. View more View less Competing Interests No competing interests were disclosed. reply Respond Report a concern Pearse W. Peer Review Report For: taxize: taxonomic search and retrieval in R [version 2; peer review: 3 approved] . F1000Research 2013, 2 :191 ( https://doi.org/10.5256/f1000research.2227.r1855) NOTE: it is important to ensure the information in square brackets after the title is included in this citation. The direct URL for this report is: https://f1000research.com/articles/2-191/v1#referee-response-1855 Alongside their report, reviewers assign a status to the article: Approved - the paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations - A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved - fundamental flaws in the paper seriously undermine the findings and conclusions Adjust parameters to alter display View on desktop for interactive features Includes Interactive Elements View on desktop for interactive features Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Stay Updated Sign up for content alerts and receive a weekly or monthly email with all newly published articles Register with F1000Research Already registered? Sign in Not now, thanks close PLEASE NOTE If you are an AUTHOR of this article, please check that you signed in with the account associated with this article otherwise we cannot automatically identify your role as an author and your comment will be labelled as a “User Comment”. If you are a REVIEWER of this article, please check that you have signed in with the account associated with this article and then go to your account to submit your report, please do not post your review here. If you do not have access to your original account, please contact us . All commenters must hold a formal affiliation as per our Policies . The information that you give us will be displayed next to your comment. User comments must be in English, comprehensible and relevant to the article under discussion. We reserve the right to remove any comments that we consider to be inappropriate, offensive or otherwise in breach of the User Comment Terms and Conditions . Commenters must not use a comment for personal attacks. When criticisms of the article are based on unpublished data, the data should be made available. I accept the User Comment Terms and Conditions Please confirm that you accept the User Comment Terms and Conditions. Affiliation ✕ refresh Please enter your institution. Note: To add your institution or organisation, start typing the name and then select the correct name from the list. Where applicable, the name will appear in both the original language and in English. Do not paste in the name. If the name does not appear in the drop-down list, we will display the information you have entered. ✕ refresh Country/Region * USA UK Canada China France Germany Afghanistan Aland Islands Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Armenia Aruba Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory British Virgin Islands Brunei Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands Central African Republic Chad Chile China Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Cook Islands Costa Rica Cote d'Ivoire Croatia Cuba Cyprus Czech Republic Democratic Republic of the Congo Denmark Djibouti Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Falkland Islands Faroe Islands Federated States of Micronesia Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana Haiti Heard Island and Mcdonald Islands Holy See (Vatican City State) Honduras Hong Kong Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy Jamaica Japan Jersey Jordan Kazakhstan Kenya Kiribati Kosovo (Serbia and Montenegro) Kuwait Kyrgyzstan Lao People's Democratic Republic Latvia Lebanon Lesotho Liberia Libya Liechtenstein Lithuania Luxembourg Macao Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Minor Outlying Islands of the United States Moldova Monaco Mongolia Montenegro Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Antilles New Caledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island North Korea North Macedonia Northern Mariana Islands Norway Oman Pakistan Palau Palestinian Territory Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russian Federation Rwanda Saint Helena Saint Kitts and Nevis Saint Lucia Saint Pierre and Miquelon Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe Saudi Arabia Senegal Serbia Seychelles Sierra Leone Singapore Slovakia Slovenia Solomon Islands Somalia South Africa South Georgia and the South Sandwich Is South Korea South Sudan Spain Sri Lanka Sudan Suriname Svalbard and Jan Mayen Swaziland Sweden Switzerland Syria Taiwan Tajikistan Tanzania Thailand The Gambia The Netherlands Timor-Leste Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu UK USA Uganda Ukraine United Arab Emirates United States Virgin Islands Uruguay Uzbekistan Vanuatu Venezuela Vietnam Wallis and Futuna West Bank and Gaza Strip Western Sahara Yemen Zambia Zimbabwe Please select your country/region. You must enter a comment. Competing Interests Please disclose any competing interests that might be construed to influence your judgment of the article's or peer review report's validity or importance. Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Please state your competing interests The comment has been saved. An error has occurred. Please try again. Cancel Post var lTitle = "taxize: taxonomic search and retrieval in...".replace("'", ''); var linkedInUrl = "http://www.linkedin.com/shareArticle?url=https://f1000research.com/articles/2-191/v2" + "&title=" + encodeURIComponent(lTitle) + "&summary=" + encodeURIComponent('Read the article by '); var deliciousUrl = "https://del.icio.us/post?url=https://f1000research.com/articles/2-191/v2&title=" + encodeURIComponent(lTitle); var redditUrl = "http://reddit.com/submit?url=https://f1000research.com/articles/2-191/v2" + "&title=" + encodeURIComponent(lTitle); linkedInUrl += encodeURIComponent('Chamberlain SA and Szöcs E'); var offsetTop = /chrome/i.test( navigator.userAgent ) ? 4 : -10; var addthis_config = { ui_offset_top: offsetTop, services_compact : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_expanded : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_custom : [ { name: "LinkedIn", url: linkedInUrl, icon:"/img/icon/at_linkedin.svg" }, { name: "Mendeley", url: "http://www.mendeley.com/import/?url=https://f1000research.com/articles/2-191/v2/mendeley", icon:"/img/icon/at_mendeley.svg" }, { name: "Reddit", url: redditUrl, icon:"/img/icon/at_reddit.svg" }, ] }; var addthis_share = { url: "https://f1000research.com/articles/2-191", templates : { twitter : "taxize: taxonomic search and retrieval in R. Chamberlain SA and Szöcs E, published by " + "@F1000Research" + ", https://f1000research.com/articles/2-191/v2" } }; if (typeof(addthis) != "undefined"){ addthis.addEventListener('addthis.ready', checkCount); addthis.addEventListener('addthis.menu.share', checkCount); } $(".f1r-shares-twitter").attr("href", "https://twitter.com/intent/tweet?text=" + addthis_share.templates.twitter); $(".f1r-shares-facebook").attr("href", "https://www.facebook.com/sharer/sharer.php?u=" + addthis_share.url); $(".f1r-shares-linkedin").attr("href", addthis_config.services_custom[0].url); $(".f1r-shares-reddit").attr("href", addthis_config.services_custom[2].url); $(".f1r-shares-mendelay").attr("href", addthis_config.services_custom[1].url); function checkCount(){ setTimeout(function(){ $(".addthis_button_expanded").each(function(){ var count = $(this).text(); if (count !== "" && count != "0") $(this).removeClass("is-hidden"); else $(this).addClass("is-hidden"); }); }, 1000); } close How to cite this report {{reportCitation}} Cancel Copy Citation Details $(function(){R.ui.buttonDropdowns('.dropdown-for-downloads');}); $(function(){R.ui.toolbarDropdowns('.toolbar-dropdown-for-downloads');}); $.get("/articles/acj/2024/2767") new F1000.Clipboard(); new F1000.ThesaurusTermsDisplay("articles", "article", "2767"); $(document).ready(function() { $( "#frame1" ).on('load', function() { var mydiv = $(this).contents().find("div"); var h = mydiv.height(); console.log(h) }); var tooltipLivingFigure = jQuery(".interactive-living-figure-label .icon-more-info"), titleLivingFigure = tooltipLivingFigure.attr("title"); tooltipLivingFigure.simpletip({ fixed: true, position: ["-115", "30"], baseClass: 'small-tooltip', content:titleLivingFigure + " " }); tooltipLivingFigure.removeAttr("title"); $("body").on("click", ".cite-living-figure", function(e) { e.preventDefault(); var ref = $(this).attr("data-ref"); $(this).closest(".living-figure-list-container").find("#" + ref).fadeIn(200); }); $("body").on("click", ".close-cite-living-figure", function(e) { e.preventDefault(); $(this).closest(".popup-window-wrapper").fadeOut(200); }); $(document).on("mouseup", function(e) { var metricsContainer = $(".article-metrics-popover-wrapper"); if (!metricsContainer.is(e.target) && metricsContainer.has(e.target).length === 0) { $(".article-metrics-close-button").click(); } }); var articleId = $('#articleId').val(); if($("#main-article-count-box").attachArticleMetrics) { $("#main-article-count-box").attachArticleMetrics(articleId, { articleMetricsView: true }); } }); var figshareWidget = $(".new_figshare_widget"); if (figshareWidget.length > 0) { window.figshare.load("f1000", function(Widget) { // Select a tag/tags defined in your page. In this tag we will place the widget. _.map(figshareWidget, function(el){ var widget = new Widget({ articleId: $(el).attr("figshare_articleId") //height:300 // this is the height of the viewer part. [Default: 550] }); widget.initialize(); // initialize the widget widget.mount(el); // mount it in a tag that's on your page // this will save the widget on the global scope for later use from // your JS scripts. This line is optional. //window.widget = widget; }); }); } close Error Close Add Reset F1000.MICROSERVICES.AFFILIATION = ''; $(document).ready(function () { $('.js-affiliations-form').each((index, form) => { new AffiliationForm({ formId: form.id, institutionErrorSelector: '.comment-enter-institution', departmentErrorSelector: '.comment-enter-department', placeSelector: '.js-add-comment-place', stateSelector: '.js-add-comment-state', zipCodeSelector: '.js-add-comment-zipcode', countrySelector: '.js-add-comment-country', countryErrorSelector: '.comment-enter-country', }); }); }); $(document).ready(function () { var reportIds = { "1856": 0, "2194": 47, "2195": 48, "2196": 35, "1853": 36, "1854": 34, "1855": 47, }; $(".referee-response-container,.js-referee-report").each(function(index, el) { var reportId = $(el).attr("data-reportid"), reportCount = reportIds[reportId] || 0; $(el).find(".comments-count-container,.js-referee-report-views").html(reportCount); }); var uuidInput = $("#article_uuid"), oldUUId = uuidInput.val(), newUUId = "fa466681-9f2f-4139-ade4-8b25702b0807"; uuidInput.val(newUUId); $("a[href*='article_uuid=']").each(function(index, el) { var newHref = $(el).attr("href").replace(oldUUId, newUUId); $(el).attr("href", newHref); }); }); An innovative open access publishing platform offering rapid publication and open peer review, whilst supporting data deposition and sharing. Browse Gateways Collections How it Works Contact For Developers Cookie Notice Privacy Notice RSS Submit Your Research Follow us © 2012-2026 F1000 Research Ltd. ISSN 2046-1402 | Legal | Partner of Research4Life • CrossRef • ORCID • FAIRSharing R.templateTests.simpleTemplate = R.template(' $text $text $text $text $text '); R.templateTests.runTests(); var F1000platform = new F1000.Platform({ name: "f1000research", displayName: "F1000Research", hostName: "f1000research.com", id: "1", editorialEmail: "[email protected]", infoEmail: "[email protected]", usePmcStats: true }); $(function(){R.ui.dropdowns('.dropdown-for-authors, .dropdown-for-about, .dropdown-for-myresearch');}); // $(function(){R.ui.dropdowns('.dropdown-for-referees');}); $(document).ready(function () { if ($(".cookie-warning").is(":visible")) { $(".sticky").css("margin-bottom", "35px"); $(".devices").addClass("devices-and-cookie-warning"); } $(".cookie-warning .close-button").click(function (e) { $(".devices").removeClass("devices-and-cookie-warning"); $(".sticky").css("margin-bottom", "0"); }); $("#tweeter-feed .tweet-message").each(function (i, message) { var self = $(message); self.html(linkify(self.html())); }); $(".partner").on("mouseenter mouseleave", function() { $(this).find(".gray-scale, .colour").toggleClass("is-hidden"); }); }); Sign In Remember me Forgotten your password? Sign In Cancel Email or password not correct. Please try again Please wait... $(function(){ // Note: All the setup needs to run against a name attribute and *not* the id due the clonish // nature of facebox... $("a[id=googleSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("GOOGLE"); $("form[id=oAuthForm]").submit(); }); $("a[id=facebookSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("FACEBOOK"); $("form[id=oAuthForm]").submit(); }); $("a[id=orcidSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("ORCID"); $("form[id=oAuthForm]").submit(); }); }); If you've forgotten your password, please enter your email address below and we'll send you instructions on how to reset your password. The email address should be the one you originally registered with F1000. Email address not valid, please try again You registered with F1000 via Google, so we cannot reset your password. To sign in, please click here . If you still need help with your Google account password, please click here . You registered with F1000 via Facebook, so we cannot reset your password. To sign in, please click here . If you still need help with your Facebook account password, please click here . Code not correct, please try again Reset password Cancel Email us for further assistance. Server error, please try again. If your email address is registered with us, we will email you instructions to reset your password. If you think you should have received this email but it has not arrived, please check your spam filters and/or contact for further assistance. Please wait... Register $(document).ready(function () { signIn.createSignInAsRow($("#sign-in-form-gfb-popup")); $(".target-field").each(function () { var uris = $(this).val().split("/"); if (uris.pop() === "login") { $(this).val(uris.toString().replace(",","/")); } }); });

Text is read by the "Ask this paper" AI Q&A widget below. Extraction quality varies by source — PMC NXML preserves structure cleanly, OA-HTML may include some navigation residue, and OA-PDF can have broken hyphenation. The publisher copy (via DOI) is the canonical version.

My notes (saved in your browser only)

Ask this paper AI returns verbatim quotes from the full text · source: preprint-html

Answers must be backed by verbatim quotes from this paper's full text. Hallucinated quotes are dropped automatically; if no verbatim passage answers the question, we say so. How this works

Citation neighborhood (no data yet)

We don't have any in-corpus citations linked to this paper yet. The paper's references may be in our DB but unresolved to ``paper_id`` (resolution happens at ingest when the cited DOI matches a row we already have). Run the cross-source citation reconcile pass to retry.

Source provenance

europepmc
last seen: 2026-05-19T01:45:01.086888+00:00
unpaywall
last seen: 2026-05-27T02:00:06.600101+00:00
License: CC-BY-4.0