1433 lines
857 KiB
HTML
Raw Permalink Normal View History

2025-01-12 00:52:51 +08:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="date" content="2024-08-27" />
<title>Installing and Managing Bioconductor Packages</title>
<script>/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e
</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(data:application/vnd.ms-fontobject;base64,n04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ/LAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM/SEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ+pexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h/v4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs+LWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy+pRYVKGVS/1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr/Cm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB+lSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX+VSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G+KspT/FupEGGafCCwxSe6ZUa+073rXHnNdVXE6eW
</style>
<script>/*!
* Bootstrap v3.3.5 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under the MIT license
*/
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==type
d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affi
<script>/**
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
// Only run this code in IE 8
if (!!window.navigator.userAgent.match("MSIE 8")) {
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
};
</script>
<script>/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
* */
// Only run this code in IE 8
if (!!window.navigator.userAgent.match("MSIE 8")) {
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmVal
};
</script>
<style>h1 {font-size: 34px;}
h1.title {font-size: 38px;}
h2 {font-size: 30px;}
h3 {font-size: 24px;}
h4 {font-size: 18px;}
h5 {font-size: 16px;}
h6 {font-size: 12px;}
code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
</style>
<script>
/**
* jQuery Plugin: Sticky Tabs
*
* @author Aidan Lister <aidan@php.net>
* adapted by Ruben Arslan to activate parent tabs too
* http://www.aidanlister.com/2014/03/persisting-the-tab-state-in-bootstrap/
*/
(function($) {
"use strict";
$.fn.rmarkdownStickyTabs = function() {
var context = this;
// Show the tab corresponding with the hash in the URL, or the first tab
var showStuffFromHash = function() {
var hash = window.location.hash;
var selector = hash ? 'a[href="' + hash + '"]' : 'li.active > a';
var $selector = $(selector, context);
if($selector.data('toggle') === "tab") {
$selector.tab('show');
// walk up the ancestors of this element, show any hidden tabs
$selector.parents('.section.tabset').each(function(i, elm) {
var link = $('a[href="#' + $(elm).attr('id') + '"]');
if(link.data('toggle') === "tab") {
link.tab("show");
}
});
}
};
// Set the correct tab when the page loads
showStuffFromHash(context);
// Set the correct tab when a user uses their back/forward button
$(window).on('hashchange', function() {
showStuffFromHash(context);
});
// Change the URL when tabs are clicked
$('a', context).on('click', function(e) {
history.pushState(null, null, this.href);
showStuffFromHash(context);
});
return this;
};
}(jQuery));
window.buildTabsets = function(tocID) {
// build a tabset from a section div with the .tabset class
function buildTabset(tabset) {
// check for fade and pills options
var fade = tabset.hasClass("tabset-fade");
var pills = tabset.hasClass("tabset-pills");
var navClass = pills ? "nav-pills" : "nav-tabs";
// determine the heading level of the tabset and tabs
var match = tabset.attr('class').match(/level(\d) /);
if (match === null)
return;
var tabsetLevel = Number(match[1]);
var tabLevel = tabsetLevel + 1;
// find all subheadings immediately below
var tabs = tabset.find("div.section.level" + tabLevel);
if (!tabs.length)
return;
// create tablist and tab-content elements
var tabList = $('<ul class="nav ' + navClass + '" role="tablist"></ul>');
$(tabs[0]).before(tabList);
var tabContent = $('<div class="tab-content"></div>');
$(tabs[0]).before(tabContent);
// build the tabset
var activeTab = 0;
tabs.each(function(i) {
// get the tab div
var tab = $(tabs[i]);
// get the id then sanitize it for use with bootstrap tabs
var id = tab.attr('id');
// see if this is marked as the active tab
if (tab.hasClass('active'))
activeTab = i;
// remove any table of contents entries associated with
// this ID (since we'll be removing the heading element)
$("div#" + tocID + " li a[href='#" + id + "']").parent().remove();
// sanitize the id for use with bootstrap tabs
id = id.replace(/[.\/?&!#<>]/g, '').replace(/\s/g, '_');
tab.attr('id', id);
// get the heading element within it, grab it's text, then remove it
var heading = tab.find('h' + tabLevel + ':first');
var headingText = heading.html();
heading.remove();
// build and append the tab list item
var a = $('<a role="tab" data-toggle="tab">' + headingText + '</a>');
a.attr('href', '#' + id);
a.attr('aria-controls', id);
var li = $('<li role="presentation"></li>');
li.append(a);
tabList.append(li);
// set it's attributes
tab.attr('role', 'tabpanel');
tab.addClass('tab-pane');
tab.addClass('tabbed-pane');
if (fade)
tab.addClass('fade');
// move it into the tab content div
tab.detach().appendTo(tabContent);
});
// set active tab
$(tabList.children('li')[activeTab]).addClass('active');
var active = $(tabContent.children('div.section')[activeTab]);
active.addClass('active');
if (fade)
active.addClass('in');
if (tabset.hasClass("tabset-sticky"))
tabset.rmarkdownStickyTabs();
}
// convert section divs with the .tabset class to tabsets
var tabsets = $("div.section.tabset");
tabsets.each(function(i) {
buildTabset($(tabsets[i]));
});
};
</script>
<style type="text/css">.hljs-literal {
color: #990073;
}
.hljs-number {
color: #099;
}
.hljs-comment {
color: #998;
font-style: italic;
}
.hljs-keyword {
color: #900;
font-weight: bold;
}
.hljs-string {
color: #d14;
}
</style>
<script src="data:application/javascript;base64,LyohIGhpZ2hsaWdodC5qcyB2OS4xMi4wIHwgQlNEMyBMaWNlbnNlIHwgZ2l0LmlvL2hsanNsaWNlbnNlICovCiFmdW5jdGlvbihlKXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93fHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGY7InVuZGVmaW5lZCIhPXR5cGVvZiBleHBvcnRzP2UoZXhwb3J0cyk6biYmKG4uaGxqcz1lKHt9KSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gbi5obGpzfSkpfShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUpe3JldHVybiBlLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1mdW5jdGlvbiB0KGUpe3JldHVybiBlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcihlLG4pe3ZhciB0PWUmJmUuZXhlYyhuKTtyZXR1cm4gdCYmMD09PXQuaW5kZXh9ZnVuY3Rpb24gYShlKXtyZXR1cm4gay50ZXN0KGUpfWZ1bmN0aW9uIGkoZSl7dmFyIG4sdCxyLGksbz1lLmNsYXNzTmFtZSsiICI7aWYobys9ZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5jbGFzc05hbWU6IiIsdD1CLmV4ZWMobykpcmV0dXJuIHcodFsxXSk/dFsxXToibm8taGlnaGxpZ2h0Ijtmb3Iobz1vLnNwbGl0KC9ccysvKSxuPTAscj1vLmxlbmd0aDtyPm47bisrKWlmKGk9b1tuXSxhKGkpfHx3KGkpKXJldHVybiBpfWZ1bmN0aW9uIG8oZSl7dmFyIG4sdD17fSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IobiBpbiBlKXRbbl09ZVtuXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2ZvcihuIGluIGUpdFtuXT1lW25dfSksdH1mdW5jdGlvbiB1KGUpe3ZhciBuPVtdO3JldHVybiBmdW5jdGlvbiByKGUsYSl7Zm9yKHZhciBpPWUuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZykzPT09aS5ub2RlVHlwZT9hKz1pLm5vZGVWYWx1ZS5sZW5ndGg6MT09PWkubm9kZVR5cGUmJihuLnB1c2goe2V2ZW50OiJzdGFydCIsb2Zmc2V0OmEsbm9kZTppfSksYT1yKGksYSksdChpKS5tYXRjaCgvYnJ8aHJ8aW1nfGlucHV0Lyl8fG4ucHVzaCh7ZXZlbnQ6InN0b3AiLG9mZnNldDphLG5vZGU6aX0pKTtyZXR1cm4gYX0oZSwwKSxufWZ1bmN0aW9uIGMoZSxyLGEpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gZS5sZW5ndGgmJnIubGVuZ3RoP2VbMF0ub2Zmc2V0IT09clswXS5vZmZzZXQ/ZVswXS5vZmZzZXQ8clswXS5vZmZzZXQ/ZTpyOiJzdGFydCI9PT1yWzBdLmV2ZW50P2U6cjplLmxlbmd0aD9lOnJ9ZnVuY3Rpb24gbyhlKXtmdW5jdGlvbiByKGUpe3JldHVybiIgIitlLm5vZGVOYW1lKyc9IicrbihlLnZhbHVlKS5yZXBsYWNlKCciJywiJnF1b3Q7IikrJyInfXMrPSI8Iit0KGUpK0UubWFwLmNhbGwoZS5hdHRyaWJ1dGVzLHIpLmpvaW4oIiIpKyI+In1mdW5jdGlvbiB1KGUpe3MrPSI8LyIrdChlKSsiPiJ9ZnVuY3Rpb24gYyhlKXsoInN0YXJ0Ij09PWUuZXZlbnQ/bzp1KShlLm5vZGUpfWZvcih2YXIgbD0wLHM9IiIsZj1bXTtlLmxlbmd0aHx8ci5sZW5ndGg7KXt2YXIgZz1pKCk7aWYocys9bihhLnN1YnN0cmluZyhsLGdbMF0ub2Zmc2V0KSksbD1nWzBdLm9mZnNldCxnPT09ZSl7Zi5yZXZlcnNlKCkuZm9yRWFjaCh1KTtkbyBjKGcuc3BsaWNlKDAsMSlbMF0pLGc9aSgpO3doaWxlKGc9PT1lJiZnLmxlbmd0aCYmZ1swXS5vZmZzZXQ9PT1sKTtmLnJldmVyc2UoKS5mb3JFYWNoKG8pfWVsc2Uic3RhcnQiPT09Z1swXS5ldmVudD9mLnB1c2goZ1swXS5ub2RlKTpmLnBvcCgpLGMoZy5zcGxpY2UoMCwxKVswXSl9cmV0dXJuIHMrbihhLnN1YnN0cihsKSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS52JiYhZS5jYWNoZWRfdmFyaWFudHMmJihlLmNhY2hlZF92YXJpYW50cz1lLnYubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBvKGUse3Y6bnVsbH0sbil9KSksZS5jYWNoZWRfdmFyaWFudHN8fGUuZVcmJltvKGUpXXx8W2VdfWZ1bmN0aW9uIHMoZSl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZSYmZS5zb3VyY2V8fGV9ZnVuY3Rpb24gdCh0LHIpe3JldHVybiBuZXcgUmVnRXhwKG4odCksIm0iKyhlLmNJPyJpIjoiIikrKHI/ImciOiIiKSl9ZnVuY3Rpb24gcihhLGkpe2lmKCFhLmNvbXBpbGVkKXtpZihhLmNvbXBpbGVkPSEwLGEuaz1hLmt8fGEuYkssYS5rKXt2YXIgbz17fSx1PWZ1bmN0aW9uKG4sdCl7ZS5jSSYmKHQ9dC50b0xvd2VyQ2FzZSgpKSx0LnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCJ8Iik7b1t0WzBdXT1bbix0WzFdP051bWJlcih0WzFdKToxXX0pfTsic3RyaW5nIj09dHlwZW9mIGEuaz91KCJrZXl3b3JkIixhLmspOngoYS5rKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3UoZSxhLmtbZV0pfSksYS5rPW99YS5sUj10KGEubHx8L1x3Ky8sITApLGkmJihhLmJLJiYoYS5iPSJcXGIoIithLmJLLnNwbGl0KCIgIikuam9pbigifCIpKyIpXFxiIiksYS5ifHwoYS5iPS9cQnxcYi8pLGEuYlI9dChhLmIpLGEuZXx8YS5lV3x8KGEuZT0vXEJ8XGIvKSxhLmUmJihhLmVSPXQoYS5lKSksYS50RT1uKGEuZSl8fCIiLGEuZVcmJmkudEUmJihhLnRFKz0oYS5lPyJ8IjoiIikraS50RSkpLGEuaSYmKGEuaVI9dChhLmkpKSxudWxsPT1hLnImJihhLnI9MSksYS5jfHwoYS5jPVtdKSxhLmM9QXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxhLmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBsKCJzZWxmIj09PWU/YTplKX0pKSxhLmMuZm9yRWFjaChmdW5jdGlvbihlKXtyKGUsYSl9KSxhLnN0YXJ0cyYmcihhLnN0YXJ0cyxpKTt2YXIgYz1hLmMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJLPyJcXC4/KCIrZS5iKyIpXFwuPyI6ZS5ifSkuY29uY2F0KFthLnRFLGEuaV0pLm1hcChuKS5maWx0ZXIoQm9vbGVhbik7YS50PWMubGVuZ3RoP3QoYy5qb2luKCJ8IiksITApOntleGVjOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fX19cihlKX1mdW5jdGlvbiBmKGUsdCxhLGkpe2Z1bmN0aW9uIG8oZSxuKXt2YXIgdCxhO2Zvcih0PTAsYT1uLmMubGVuZ3RoO2E+dDt0Kys
<style type="text/css">
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
</style>
<style type="text/css">code{white-space: pre;}</style>
<script type="text/javascript">
if (window.hljs) {
hljs.configure({languages: []});
hljs.initHighlightingOnLoad();
if (document.readyState && document.readyState === "complete") {
window.setTimeout(function() { hljs.initHighlighting(); }, 0);
}
}
</script>
<style type="text/css">body {
margin: 0px auto;
max-width: 1134px;
font-family: sans-serif;
font-size: 10pt;
}
div#TOC ul {
padding: 0px 0px 0px 45px;
list-style: none;
background-image: none;
background-repeat: none;
background-position: 0;
font-size: 10pt;
font-family: Helvetica, Arial, sans-serif;
}
div#TOC > ul {
padding: 0px 150px 0px 65px;
font-size: 12pt;
}
div#TOC > ul > li {
padding: 5px 0px 0px 0px;
}
div#TOC ul ul {
font-size: 11pt;
}
div#TOC.tocify ul {
padding: 0px;
font-size: inherit;
font-family: inherit;
}
div#TOC.tocify li {
padding: 5px;
font-size: inherit;
font-family: inherit;
}
p, dl {
padding: 0px 150px 0px 65px;
text-align: justify;
}
p, img, table {
margin-top: 10px;
margin-bottom: 10px;
}
ol, ul {
padding: 0px 150px 0px 100px;
list-style: square;
}
li ol, li ul {
padding: 0px 0px 0px 35px;
}
li p {
padding: 0;
}
pre {
margin: 0em 150px 0.5em 0em;
padding: 0px 0px 0px 65px;
border: 0px none;
background-color: #f0f0f0;
white-space: pre;
overflow-x: auto;
font-size: 90%;
}
li pre {
margin: 0em 0px 0.5em -65px;
padding: 0px 0px 0px 65px;
}
pre code {
background-color: inherit;
display: block;
padding: 10px 10px 10px 0px;
white-space: pre;
overflow-x: inherit;
font-size: 100%;
}
pre code[class] {
background-color: inherit;
}
pre[class] code {
background-color: inherit;
}
tt, code, pre {
font-family: 'DejaVu Sans Mono', 'Droid Sans Mono', 'Lucida Console', Consolas, Monaco, monospace;
}
h1, h2, h3, h4, h5, h6 {
font-family: Helvetica, Arial, sans-serif;
margin: 1.2em 150px 0.6em 0em;
padding-left: 65px;
text-indent: -65px;
}
h1.title {
color: #87b13f;
line-height: 1.1em;
margin-top: 25px;
border-bottom: 0px;
}
h1 {
line-height: 1.4em;
border-bottom: 1px #1a81c2 solid;
}
h1, h2, h3 {
color: #1a81c2;
}
h1 {
font-size: 18.0pt;
}
h2 {
font-size: 14.5pt;
}
h3, h4 {
font-size: 12pt;
}
span.header-section-number {
float: left;
width: 65px;
}
p.author-name {
font-size: 14.5pt;
font-weight: bold;
font-style: italic;
text-align: left;
}
.date {
text-indent: 0px;
font-weight: bold;
}
.abstract, .package {
font-weight: bold;
}
code {
background-color: #f0f0f0;
color: #404040;
font-size: 90%;
}
.figure {
margin: 0em 0px 0.5em;
}
img {
max-width: 100%;
display: block;
padding: 0px 150px 0px 130px;
}
p > img {
padding-left: 65px;
padding-right: 0px;
}
td > img {
padding: 0px;
max-width: 100%;
display: inline;
}
img.smallfigure {
padding-left: 195px;
padding-right: 280px;
}
p > img.smallfigure {
padding-left: 130px;
padding-right: 130px;
}
img.widefigure {
padding-left: 65px;
padding-right: 85px;
margin-right: -65px;
}
p > img.widefigure {
padding-left: 0px;
padding-right: 0px;
margin-right: -65px;
}
p.caption, caption {
color: inherit;
font-size: 8pt;
}
p.caption {
padding-left: 130px;
padding-right: 85px;
margin-bottom: 20px;
}
caption {
padding: 0px;
margin-bottom: 10px;
min-width: 583;
}
span.caption-title {
color: #1a81c2;
font-weight: bold;
}
span.caption-label {
font-weight: bold;
}
table {
margin-left: 130px;
margin-right: 85px;
}
.table {
max-width: 518px;
}
dd {
margin-left: 65px;
margin-bottom: 10px;
}
.code-folding-btn {
position: relative;
margin-top: -26px;
top: 26px;
}
.col-md-12 {
min-height: 0px;
}
.sidenote {
float: right;
clear: right;
margin-right: -150px;
width: 130px;
margin-top: 0;
margin-bottom: 1rem;
font-size: 8pt;
line-height: 1.3;
vertical-align: baseline;
position: relative;
text-align: left;
}
.sidenote-number, .affil-mark {
position: relative;
vertical-align: super;
font-size: 7.5pt;
font-weight: normal;
font-style: normal;
line-height: normal;
}
code > span.kw { color: #E07020; }
code > span.dt { color: #404040; }
code > span.dv { color: #D02070; }
code > span.bn { color: #d14; }
code > span.fl { color: #D02070; }
code > span.ch { color: #40A040; }
code > span.st { color: #40A040; }
code > span.co { color: #808080; font-style: italic; }
code > span.ot { color: #2020F0; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #E07020; }
code > span.er { color: #FF0000; }
code > span.identifier { color: #404040; }
code > span.number { color: #D02070; }
code > span.string { color: #40A040; }
code > span.comment { color: #808080; font-style: italic; }
code > span.keyword { color: #2020F0; }
code > span.literal { color: #2020F0; }
code > span.operator { color: #000000;}
code > span.paren { color: #000000;}
.js-plotly-plot .plotly {
padding-left: 65px;
}
.references {
padding-right: 150px;
}
.margin-toggle {
display: none;
}
@media screen and (max-width: 991px) {
body {
padding-left: 0;
margin-left: 0;
margin-right: 0;
width: auto;
}
p {
padding-left: 0;
padding-right: 0;
}
.references { padding-right: 0;
}
h1, h2, h3, h4, h5, h6 {
width: 100%;
padding-left: 0;
text-indent: 0;
}
ul {
padding-left: 20px;
padding-right: 0;
}
li pre {
margin-left: -20px;
padding-left: 10px;
}
pre {
margin-right: 0;
padding-left: 10px;
}
pre code {
white-space: pre;
}
p img{
padding-left: 0;
}
.horizontal-scroll {
overflow-x: auto;
}
.table {
min-width: 100%;
margin: 0 0 0 0;
}
div.figure img {
padding: 0 0 0 0;
}
div.figure p.caption {
padding-left: 0;
padding-right: 0;
}
.sidenote {
float: unset;
margin-top: 1rem;
margin-right: 0;
margin-left: 10%;
width: 80%;
font-size: 8pt;
line-height: 1.3;
text-align: left;
display: none;
}
.sidenote-number{
display: none;
}
.margin-toggle {
display: inline;
position: relative;
vertical-align: super;
font-size: 7.5pt;
font-weight: normal;
font-style: normal;
line-height: normal;
color: #337ab7;
}
}
@media screen and (max-width: 767px) {
#TOC {
display: none;
}
}
</style>
<style type="text/css">
.main-container {
max-width: 828px;
margin-left: auto;
margin-right: auto;
}
img {
max-width:100%;
}
.tabbed-pane {
padding-top: 12px;
}
.html-widget {
margin-bottom: 20px;
}
button.code-folding-btn:focus {
outline: none;
}
summary {
display: list-item;
}
details > summary > p:only-child {
display: inline;
}
pre code {
padding: 0;
}
</style>
<!-- tabsets -->
<style type="text/css">
.tabset-dropdown > .nav-tabs {
display: inline-table;
max-height: 500px;
min-height: 44px;
overflow-y: auto;
border: 1px solid #ddd;
border-radius: 4px;
}
.tabset-dropdown > .nav-tabs > li.active:before, .tabset-dropdown > .nav-tabs.nav-tabs-open:before {
content: "\e259";
font-family: 'Glyphicons Halflings';
display: inline-block;
padding: 10px;
border-right: 1px solid #ddd;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
content: "\e258";
font-family: 'Glyphicons Halflings';
border: none;
}
.tabset-dropdown > .nav-tabs > li.active {
display: block;
}
.tabset-dropdown > .nav-tabs > li > a,
.tabset-dropdown > .nav-tabs > li > a:focus,
.tabset-dropdown > .nav-tabs > li > a:hover {
border: none;
display: inline-block;
border-radius: 4px;
background-color: transparent;
}
.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
display: block;
float: none;
}
.tabset-dropdown > .nav-tabs > li {
display: none;
}
</style>
<!-- code folding -->
<script>
function toggle_visibility(id1) {
var e = document.getElementById(id1);
e.style.display = ((e.style.display!="none") ? "none" : "block");
}
</script>
</head>
<body>
<div class="container-fluid main-container">
<div id="header">
<h1 class="title toc-ignore">Installing and Managing <em>Bioconductor</em> Packages</h1>
<p class="author-name">Marcel Ramos<span class="affil-mark">1</span> and Martin Morgan<span class="affil-mark">1</span></p>
<p class="author-affiliation"><span class="affil-mark">1</span>Roswell Park Comprehensive Cancer Center, Buffalo, NY</p>
<h4 class="date">27 August 2024</h4>
</div>
<h1>Contents</h1>
<div id="TOC">
<ul>
<li><a href="#introduction" id="toc-introduction"><span class="toc-section-number">1</span> Introduction</a></li>
<li><a href="#basic-use" id="toc-basic-use"><span class="toc-section-number">2</span> Basic use</a>
<ul>
<li><a href="#installing-r" id="toc-installing-r"><span class="toc-section-number">2.1</span> Installing <em>R</em></a></li>
<li><a href="#installing-biocmanager" id="toc-installing-biocmanager"><span class="toc-section-number">2.2</span> Installing <em>BiocManager</em></a></li>
<li><a href="#installing-bioconductor-cran-or-github-packages" id="toc-installing-bioconductor-cran-or-github-packages"><span class="toc-section-number">2.3</span> Installing <em>Bioconductor</em>, <em>CRAN</em>, or GitHub packages</a></li>
<li><a href="#previous-releases" id="toc-previous-releases"><span class="toc-section-number">2.4</span> Previous releases</a></li>
<li><a href="#version-and-validity-of-installations" id="toc-version-and-validity-of-installations"><span class="toc-section-number">2.5</span> Version and validity of installations</a></li>
<li><a href="#available-packages" id="toc-available-packages"><span class="toc-section-number">2.6</span> Available packages</a></li>
<li><a href="#updating-old-packages" id="toc-updating-old-packages"><span class="toc-section-number">2.7</span> Updating old packages</a>
<ul>
<li><a href="#rationale" id="toc-rationale"><span class="toc-section-number">2.7.1</span> Rationale</a></li>
<li><a href="#pros-of-updating" id="toc-pros-of-updating"><span class="toc-section-number">2.7.2</span> Pros of updating</a></li>
<li><a href="#cons-of-updating" id="toc-cons-of-updating"><span class="toc-section-number">2.7.3</span> Cons of updating</a></li>
<li><a href="#balancing-the-decision" id="toc-balancing-the-decision"><span class="toc-section-number">2.7.4</span> Balancing the Decision</a></li>
</ul></li>
<li><a href="#archived-cran-packages" id="toc-archived-cran-packages"><span class="toc-section-number">2.8</span> Archived CRAN packages</a></li>
</ul></li>
<li><a href="#advanced-use" id="toc-advanced-use"><span class="toc-section-number">3</span> Advanced use</a>
<ul>
<li><a href="#changing-version" id="toc-changing-version"><span class="toc-section-number">3.1</span> Changing version</a></li>
<li><a href="#unsupported-r-bioconductor-versions" id="toc-unsupported-r-bioconductor-versions"><span class="toc-section-number">3.2</span> Unsupported <em>R</em> / <em>Bioconductor</em> versions</a></li>
<li><a href="#multiple-versions" id="toc-multiple-versions"><span class="toc-section-number">3.3</span> Managing multiple versions</a></li>
<li><a href="#offline-use" id="toc-offline-use"><span class="toc-section-number">3.4</span> Offline use</a>
<ul>
<li><a href="#offline-config.yaml" id="toc-offline-config.yaml"><span class="toc-section-number">3.4.1</span> Offline config.yaml</a></li>
</ul></li>
</ul></li>
<li><a href="#how-it-works" id="toc-how-it-works"><span class="toc-section-number">4</span> How it works</a></li>
<li><a href="#troubleshooting" id="toc-troubleshooting"><span class="toc-section-number">5</span> Troubleshooting</a>
<ul>
<li><a href="#package-not-available" id="toc-package-not-available"><span class="toc-section-number">5.1</span> Package not available</a></li>
<li><a href="#cannot-load-biocmanager" id="toc-cannot-load-biocmanager"><span class="toc-section-number">5.2</span> Cannot load <em>BiocManager</em></a></li>
<li><a href="#timeout-during-package-download" id="toc-timeout-during-package-download"><span class="toc-section-number">5.3</span> Timeout during package download</a></li>
<li><a href="#multiple-biocversion-installations" id="toc-multiple-biocversion-installations"><span class="toc-section-number">5.4</span> Multiple <code>BiocVersion</code> installations</a></li>
<li><a href="#errors-determining-bioconductor-version" id="toc-errors-determining-bioconductor-version"><span class="toc-section-number">5.5</span> Errors determining <em>Bioconductor</em> version</a></li>
</ul></li>
<li><a href="#session-information" id="toc-session-information"><span class="toc-section-number">6</span> Session information</a></li>
</ul>
</div>
<div id="introduction" class="section level1" number="1">
<h1><span class="header-section-number">1</span> Introduction</h1>
<p>Use the <a href="https://cran.r-project.org/package=BiocManager">BiocManager</a> package to install and manage packages from the
<em><a href="https://bioconductor.org">Bioconductor</a></em> project for the statistical analysis and comprehension of
high-throughput genomic data.</p>
<p>Current <em>Bioconductor</em> packages are available on a release version intended
for every-day use, and a devel version where new features are introduced. A
new release version is created every six months. Using the <a href="https://cran.r-project.org/package=BiocManager">BiocManager</a>
package helps users install packages from the same release.</p>
</div>
<div id="basic-use" class="section level1" number="2">
<h1><span class="header-section-number">2</span> Basic use</h1>
<div id="installing-r" class="section level2" number="2.1">
<h2><span class="header-section-number">2.1</span> Installing <em>R</em></h2>
<p>We recommend using the current release version of <em>R</em>. <a href="https://cran.R-project.org/">Follow
instructions</a> for installing <em>R</em>.</p>
</div>
<div id="installing-biocmanager" class="section level2" number="2.2">
<h2><span class="header-section-number">2.2</span> Installing <em>BiocManager</em></h2>
<p>Use standard <em>R</em> installation procedures to install the
<a href="https://cran.r-project.org/package=BiocManager">BiocManager</a> package. This command is requried only once per <em>R</em>
installation.</p>
<pre class="r"><code>install.packages(&quot;BiocManager&quot;, repos = &quot;https://cloud.r-project.org&quot;)</code></pre>
</div>
<div id="installing-bioconductor-cran-or-github-packages" class="section level2" number="2.3">
<h2><span class="header-section-number">2.3</span> Installing <em>Bioconductor</em>, <em>CRAN</em>, or GitHub packages</h2>
<p>Install <em>Bioconductor</em> (or CRAN) packages with</p>
<pre class="r"><code>BiocManager::install(c(&quot;GenomicRanges&quot;, &quot;Organism.dplyr&quot;))</code></pre>
<p>Installed packages can be updated to their current version with</p>
<pre class="r"><code>BiocManager::install()</code></pre>
</div>
<div id="previous-releases" class="section level2" number="2.4">
<h2><span class="header-section-number">2.4</span> Previous releases</h2>
<p>To install CRAN package versions consistent with previous releases of
Bioconductor, use the <a href="https://github.com/Bioconductor/BiocArchive">BiocArchive</a> package. BiocArchive enables
contemporary installations of CRAN packages with out-of-date <em>Bioconductor</em>
releases using <a href="https://packagemanager.posit.co/">Posit Public Package Manager</a>.</p>
</div>
<div id="version-and-validity-of-installations" class="section level2" number="2.5">
<h2><span class="header-section-number">2.5</span> Version and validity of installations</h2>
<p>Use <code>version()</code> to discover the version of <em>Bioconductor</em> currently in
use.</p>
<pre class="r"><code>BiocManager::version()</code></pre>
<p><em>Bioconductor</em> packages work best when they are all from the same release. Use
<code>valid()</code> to identify packages that are out-of-date or from unexpected
versions.</p>
<pre class="r"><code>BiocManager::valid()</code></pre>
<p><code>valid()</code> returns an object that can be queried for detailed
information about invalid packages, as illustrated in the following
screen capture</p>
<pre><code>&gt; v &lt;- valid()
Warning message:
6 packages out-of-date; 0 packages too new
&gt; names(v)
[1] &quot;out_of_date&quot; &quot;too_new&quot;
&gt; head(v$out_of_date, 2)
Package LibPath
bit &quot;bit&quot; &quot;/home/mtmorgan/R/x86_64-pc-linux-gnu-library/3.5-Bioc-3.8&quot;
ff &quot;ff&quot; &quot;/home/mtmorgan/R/x86_64-pc-linux-gnu-library/3.5-Bioc-3.8&quot;
Installed Built ReposVer Repository
bit &quot;1.1-12&quot; &quot;3.5.0&quot; &quot;1.1-13&quot; &quot;https://cloud.r-project.org/src/contrib&quot;
ff &quot;2.2-13&quot; &quot;3.5.0&quot; &quot;2.2-14&quot; &quot;https://cloud.r-project.org/src/contrib&quot;
&gt;</code></pre>
</div>
<div id="available-packages" class="section level2" number="2.6">
<h2><span class="header-section-number">2.6</span> Available packages</h2>
<p>Packages available for your version of <em>Bioconductor</em> can be
discovered with <code>available()</code>; the first argument can be used to
filter package names based on a regular expression, e.g., BSgenome
package available for <em>Homo sapiens</em></p>
<pre class="r"><code>avail &lt;- BiocManager::available()
length(avail) # all CRAN &amp; Bioconductor packages
BiocManager::available(&quot;BSgenome.Hsapiens&quot;) # BSgenome.Hsapiens.* packages</code></pre>
<p>Questions about installing and managing <em>Bioconductor</em> packages should
be addressed to the <a href="https://support.bioconductor.org"><em>Bioconductor</em> support site</a>.</p>
</div>
<div id="updating-old-packages" class="section level2" number="2.7">
<h2><span class="header-section-number">2.7</span> Updating old packages</h2>
<p>The user can often get an update packages prompt similar to:</p>
<pre><code>&gt; BiocManager::install(&quot;AnVIL&quot;)
Bioconductor version 3.18 (BiocManager 1.30.22), R 4.3.1 (2023-06-16)
Old packages: &#39;AnnotationDbi&#39;, &#39;arrow&#39;, &#39;basilisk.utils&#39;, &#39;beachmat&#39;,
&#39;BiocParallel&#39;, &#39;BiocSingular&#39;, &#39;biocthis&#39;, &#39;Biostrings&#39;, &#39;bluster&#39;,
&#39;DelayedArray&#39;, &#39;downlit&#39;, &#39;edgeR&#39;, &#39;GenomeInfoDb&#39;, &#39;GenomicFeatures&#39;,
&#39;IRanges&#39;, &#39;limma&#39;, &#39;pkgbuild&#39;, &#39;pkgload&#39;, &#39;processx&#39;, &#39;RcppSpdlog&#39;, &#39;rhdf5&#39;,
&#39;rstudioapi&#39;, &#39;SingleR&#39;, &#39;testthat&#39;, &#39;usethis&#39;, &#39;xml2&#39;, &#39;KernSmooth&#39;,
&#39;Matrix&#39;, &#39;mgcv&#39;
Update all/some/none? [a/s/n]:</code></pre>
<p>A decision should be made regarding updating packages. In the following section
we will detail the rationale, pros, and cons of updating packages.</p>
<p>(An initial draft of this section was produced by ChatGPT on 28 August 2023)</p>
<div id="rationale" class="section level3" number="2.7.1">
<h3><span class="header-section-number">2.7.1</span> Rationale</h3>
<p>Package updates often include bug fixes, improvements in functionality, and
optimizations. By updating, the user can ensure that they are benefiting from
the latest enhancements and fixes in the packages they use.</p>
</div>
<div id="pros-of-updating" class="section level3" number="2.7.2">
<h3><span class="header-section-number">2.7.2</span> Pros of updating</h3>
<ul>
<li><strong>Bug Fixes</strong>: Updating packages can resolve known issues and bugs present in
older versions. This can lead to more accurate and reliable analyses.</li>
<li><strong>Performance</strong>: Package updates might come with performance optimizations
that can lead to faster execution of code and analyses.</li>
<li><strong>New Features</strong>: Updated packages might introduce new features, functions,
and capabilities that can enhance your workflow and analysis options.</li>
<li><strong>Compatibility</strong>: Newer packages are often developed with compatibility in
mind. Using outdated packages might lead to compatibility issues with other
packages or R itself.</li>
<li><strong>Security</strong>: In some cases, package updates address security
vulnerabilities. Keeping packages up to date can help maintain the security of
the computational environment.</li>
<li><strong>Documentation</strong>: Newer versions of packages might come with updated
documentation that reflects recent changes and improvements in package
functionality.</li>
</ul>
</div>
<div id="cons-of-updating" class="section level3" number="2.7.3">
<h3><span class="header-section-number">2.7.3</span> Cons of updating</h3>
<ul>
<li><strong>Code Breakage</strong>: Updates can introduce changes in package behavior,
function signatures, or syntax. This can potentially break existing code if it
relies on the previous behavior.</li>
<li><strong>Version Conflicts</strong>: Updates to one package might trigger dependencies on
updated versions of other packages. This can lead to conflicts if those updated
versions are not compatible with other parts of your workflow.</li>
<li><strong>Workflow Disruption</strong>: When you update packages, you might need to retest
and validate your analyses to ensure that the changes in package behavior dont
affect your results.</li>
<li><strong>Learning Curve</strong>: New features and changes introduced in updated packages
might require you to invest time in understanding how to use them effectively.</li>
<li><strong>Temporary Instability</strong>: Right after a major update, the new version might
not be as stable as the previous one, leading to unexpected behavior.</li>
</ul>
</div>
<div id="balancing-the-decision" class="section level3" number="2.7.4">
<h3><span class="header-section-number">2.7.4</span> Balancing the Decision</h3>
<ul>
<li>Consider how critical the package is to your analysis. If a package is central
to your workflow, updating might be more important.</li>
<li>Read the release notes of the package to understand what changes are
introduced in the update.</li>
<li>Consider using a separate environment (e.g., Docker container) for testing
updates before applying them to the main analysis environment.</li>
<li>Make sure to backup code and data before performing updates.</li>
<li>Check if there are any compatibility issues with other packages you are using.</li>
</ul>
</div>
</div>
<div id="archived-cran-packages" class="section level2" number="2.8">
<h2><span class="header-section-number">2.8</span> Archived CRAN packages</h2>
<p>In the event that a package is no longer available on CRAN, it may be
desirable to install an archived package, especially if it is assumed that the
package will return to an unarchived state at a later date. Users who wish to
protect their systems from the consequences of these state changes can
install archived packages by using the <a href="https://www.cranhaven.org/">CRANhaven</a> repository. This repository
contains archived versions of CRAN packages for up to five weeks or until
they are unarchived on CRAN. To enable archived CRAN package installations, the
user can run the following command:</p>
<pre class="r"><code>options(
repos = c(
getOption(&quot;repos&quot;),
CRANhaven = &quot;https://cranhaven.r-universe.dev&quot;
)
)
BiocManager::install(&#39;archivedPackage&#39;)</code></pre>
</div>
</div>
<div id="advanced-use" class="section level1" number="3">
<h1><span class="header-section-number">3</span> Advanced use</h1>
<div id="changing-version" class="section level2" number="3.1">
<h2><span class="header-section-number">3.1</span> Changing version</h2>
<p>Use the <code>version=</code> argument to update all packages to a specific <em>Bioconductor</em>
version</p>
<pre class="r"><code>BiocManager::install(version=&quot;3.7&quot;)</code></pre>
<p><em>Bioconductor</em> versions are associated with specific <em>R</em> versions, as
summarized <a href="https://bioconductor.org/about/release-announcements/">here</a>. Attempting to install a version of
<em>Bioconductor</em> that is not supported by the version of <em>R</em> in use
leads to an error; using the most recent version of <em>Bioconductor</em> may
require installing a new version of <em>R</em>.</p>
<pre><code>&gt; BiocManager::install(version=&quot;3.9&quot;)
Error: Bioconductor version &#39;3.9&#39; requires R version &#39;3.6&#39;; see
https://bioconductor.org/install</code></pre>
<p>A special version, <code>version=&quot;devel&quot;</code>, allows use of <em>Bioconductor</em>
packages that are under development.</p>
</div>
<div id="unsupported-r-bioconductor-versions" class="section level2" number="3.2">
<h2><span class="header-section-number">3.2</span> Unsupported <em>R</em> / <em>Bioconductor</em> versions</h2>
<p>The main purpose of BiocManager is to ensure that users install the
version of <em>Bioconductor</em> appropriate for their version of <em>R</em>. Use
the environment variable <code>R_BIOC_VERSION</code> to install any version of
<em>Bioconductor</em> on any version of <em>R</em>. Thus <em>R</em> version 4.3.0 and
<em>Bioconductor</em> version 3.19 are not compatible…</p>
<pre><code>&gt; BiocManager::install(version = &quot;3.19&quot;)
Error: Bioconductor version &#39;3.19&#39; requires R version &#39;4.4&#39;; use
`version = &#39;3.18&#39;` with R version 4.3; see
https://bioconductor.org/install</code></pre>
<p>…but the version can be forced with</p>
<pre><code>&gt; Sys.setenv(R_BIOC_VERSION=&quot;3.19&quot;)
&gt; BiocManager::install(version = &quot;3.19&quot;)
...
Bioconductor version 3.19 (BiocManager 1.30.23), R 4.3.0 (2023-04-21)</code></pre>
<p><strong>Note</strong>. Compatibility of Bioconductor with a mismatched version of R
is not guaranteed and support is not provided for such installations.</p>
</div>
<div id="multiple-versions" class="section level2" number="3.3">
<h2><span class="header-section-number">3.3</span> Managing multiple versions</h2>
<p>It is possible to have multiple versions of <em>Bioconductor</em> installed on the
same computer. A best practice is to <a href="https://cran.R-project.org/">create an initial <em>R</em> installation</a>.
Then create and use a library for each version of <em>Bioconductor</em>. The library
will contain all <em>Bioconductor</em>, CRAN, and other packages for that version of
<em>Bioconductor</em>. We illustrate the process assuming use of <em>Bioconductor</em>
version 3.7, available using <em>R</em> version 3.5</p>
<p>Create a directory to contain the library (replace <code>USER_NAME</code> with your user
name on Windows)</p>
<ul>
<li>Linux: <code>~/R/3.5-Bioc-3.7</code></li>
<li>macOS: <code>~/Library/R/3.5-Bioc-3.7/library</code></li>
<li>Windows: <code>C:\Users\USER_NAME\Documents\R\3.5-Bioc-3.7</code></li>
</ul>
<p>Set the environment variable <code>R_LIBS_USER</code> to this directory, and invoke <em>R</em>.
Command line examples for Linux are</p>
<ul>
<li>Linux: <code>R_LIBS_USER=~/R/3.5-Bioc-3.7 R</code></li>
<li>macOS: <code>R_LIBS_USER=~/Library/R/3.5-Bioc-3.7/library R</code></li>
<li>Windows: <code>cmd /C &quot;set R_LIBS_USER=C:\Users\USER_NAME\Documents\R\3.5-Bioc-3.7 &amp;&amp; R&quot;</code></li>
</ul>
<p>Once in <em>R</em>, confirm that the version-specific library path has been set</p>
<pre class="r"><code>.libPaths()</code></pre>
<p>On Linux and macOS, create a bash alias to save typing, e.g.,</p>
<ul>
<li>Linux: <code>alias Bioc3.7=&#39;R_LIBS_USER=~/R/3.5-Bioc-3.7 R&#39;</code></li>
<li>macOS: <code>alias Bioc3.7=&#39;R_LIBS_USER=~/Library/R/3.5-Bioc-3.7/library R&#39;</code></li>
</ul>
<p>Invoke these from the command line as <code>Bioc3.7</code>.</p>
<p>On Windows, create a shortcut. Go to My Computer and navigate to a directory
that is in your PATH. Then right-click and choose New-&gt;Shortcut.
In the “type the location of the item” box, put:</p>
<pre><code>cmd /C &quot;set R_LIBS_USER=C:\Users\USER_NAME\Documents\R\3.5-Bioc-3.7 &amp;&amp; R&quot;</code></pre>
<p>Click “Next”. In the “Type a name for this shortcut” box, type <code>Bioc-3.7</code>.</p>
</div>
<div id="offline-use" class="section level2" number="3.4">
<h2><span class="header-section-number">3.4</span> Offline use</h2>
<p>Offline use of <em>BiocManager</em> is possible for organizations and users that would
like to provide access to internal repositories of <em>Bioconductor</em> packages
while enforcing appropriate version checks between Bioconductor and R.
For offline use, organizations and users require the following steps:</p>
<ol style="list-style-type: decimal">
<li><p>Use <code>rsync</code> to create local repositories of <a href="https://cran.r-project.org/mirror-howto.html">CRAN</a> and
<a href="https://bioconductor.org/about/mirrors/mirror-how-to/">Bioconductor</a>. Tell <em>R</em> about these repositories using (e.g.,
in a site-wide <code>.Rprofile</code>, see <code>?.Rprofile</code>).</p>
<pre class="r"><code>options(
repos = c(CRAN_mirror = &quot;file:///path/to/CRAN-mirror&quot;),
BioC_mirror = &quot;file:///path/to/Bioc-mirror&quot;
)</code></pre>
<p>Validate repository setting by reviewing the output of <code>repositories()</code>.</p></li>
<li><p>Create an environment variable or option, e.g.,</p>
<pre class="r"><code>options(
BIOCONDUCTOR_ONLINE_VERSION_DIAGNOSIS = FALSE
)</code></pre></li>
<li><p>Use <code>install.packages()</code> to bootstrap the BiocManager installation.</p>
<pre class="r"><code>install.package(c(&quot;BiocManager&quot;, &quot;BiocVersion&quot;))</code></pre></li>
</ol>
<p>BiocManager can then be used for subsequent installations, e.g.,
<code>BiocManager::install(c(&quot;ggplot2&quot;, &quot;GenomicRanges&quot;))</code>.</p>
<div id="offline-config.yaml" class="section level3" number="3.4.1">
<h3><span class="header-section-number">3.4.1</span> Offline config.yaml</h3>
<p><em>BiocManager</em> also expects to reference an online configuration yaml
file for <em>Bioconductor</em> version validation at
<a href="https://bioconductor.org/config.yaml" class="uri">https://bioconductor.org/config.yaml</a>. With offline use, users are
expected to either host this file locally or provide their
<code>config.yaml</code> version. The package allows either an environment
variable or R-specific option to locate this file, e.g.,</p>
<pre><code>```r
options(
BIOCONDUCTOR_CONFIG_FILE = &quot;file:///path/to/config.yaml&quot;
)
```</code></pre>
</div>
</div>
</div>
<div id="how-it-works" class="section level1" number="4">
<h1><span class="header-section-number">4</span> How it works</h1>
<p>BiocManagers job is to make sure that all packages are installed from
the same <em>Bioconductor</em> version, using compatible <em>R</em> and <em>CRAN</em>
packages. However, <em>R</em> has an annual release cycle, whereas
<em>Bioconductor</em> has a twice-yearly release cycle. Also, <em>Bioconductor</em>
has a devel branch where new packages and features are introduced,
and a release branch where bug fixes and relative stability are
important; <em>CRAN</em> packages do not distinguish between devel and
release branches.</p>
<p>In the past, one would install a <em>Bioconductor</em> package by evaluating
the command <code>source(&quot;https://.../biocLite.R&quot;)</code> to read a file from the
web. The file contained an installation script that was smart enough
to figure out what version of <em>R</em> and <em>Bioconductor</em> were in use or
appropriate for the person invoking the script. Sourcing an executable
script from the web is an obvious security problem.</p>
<p>Our solution is to use a CRAN package BiocManager, so that users
install from pre-configured CRAN mirrors rather than typing in a URL
and sourcing from the web.</p>
<p>But how does a CRAN package know what version of <em>Bioconductor</em> is in
use? Can we use BiocManager? No, because we dont have enough control
over the version of BiocManager available on CRAN, e.g., everyone using
the same version of <em>R</em> would get the same version of BiocManager and
hence of <em>Bioconductor</em>. But there are two <em>Bioconductor</em> versions per R
version, so that does not work!</p>
<p>BiocManager could write information to a cache on the user disk, but
this is not a robust solution for a number of reasons. Is there any
other way that <em>R</em> could keep track of version information? Yes, by
installing a <em>Bioconductor</em> package (BiocVersion) whose sole purpose is
to indicate the version of <em>Bioconductor</em> in use.</p>
<p>By default, BiocManager installs the BiocVersion package corresponding
to the most recent released version of <em>Bioconductor</em> for the version
of <em>R</em> in use. At the time this section was written, the most recent
version of R is R-3.6.1, associated with <em>Bioconductor</em> release
version 3.9. Hence on first use of <code>BiocManager::install()</code> we see
BiocVersion version 3.9.0 being installed.</p>
<pre><code>&gt; BiocManager::install()
Bioconductor version 3.9 (BiocManager 1.30.4), R 3.6.1 Patched (2019-07-06
r76792)
Installing package(s) &#39;BiocVersion&#39;
trying URL &#39;https://bioconductor.org/packages/3.9/bioc/src/contrib/\
BiocVersion_3.9.0.tar.gz&#39;
...</code></pre>
<p>Requesting a specific version of <em>Bioconductor</em> updates, if possible,
the BiocVersion package.</p>
<pre><code>&gt; ## 3.10 is available for R-3.6
&gt; BiocManager::install(version=&quot;3.10&quot;)
Upgrade 3 packages to Bioconductor version &#39;3.10&#39;? [y/n]: y
Bioconductor version 3.10 (BiocManager 1.30.4), R 3.6.1 Patched (2019-07-06
r76792)
Installing package(s) &#39;BiocVersion&#39;
trying URL &#39;https://bioconductor.org/packages/3.10/bioc/src/contrib/\
BiocVersion_3.10.1.tar.gz&#39;
...
&gt; ## back down again...
&gt; BiocManager::install(version=&quot;3.9&quot;)
Downgrade 3 packages to Bioconductor version &#39;3.9&#39;? [y/n]: y
Bioconductor version 3.9 (BiocManager 1.30.4), R 3.6.1 Patched (2019-07-06
r76792)
Installing package(s) &#39;BiocVersion&#39;
trying URL &#39;https://bioconductor.org/packages/3.9/bioc/src/contrib/\
BiocVersion_3.9.0.tar.gz&#39;
...</code></pre>
<p>Answering <code>n</code> to the prompt to up- or downgrade packages leaves the
installation unchanged, since this would immediately create an
inconsistent installation.</p>
</div>
<div id="troubleshooting" class="section level1" number="5">
<h1><span class="header-section-number">5</span> Troubleshooting</h1>
<div id="package-not-available" class="section level2" number="5.1">
<h2><span class="header-section-number">5.1</span> Package not available</h2>
<p>(An initial draft of this section was produced by ChatGPT on 25 May 2023)</p>
<p>A user failed to install the celldex package on 25 May 2023. A
transcript of the <em>R</em> session is as follows:</p>
<pre><code>&gt; BiocManager::version()
[1] &#39;3.18&#39;
&gt; BiocManager::install(&quot;celldex&quot;)
Bioconductor version 3.18 (BiocManager 1.30.20), R 4.3.0 Patched (2023-05-01
r84362)
Installing package(s) &#39;celldex&#39;
Warning message:
package &#39;celldex&#39; is not available for Bioconductor version &#39;3.18&#39;
A version of this package for your version of R might be available elsewhere,
see the ideas at
https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages</code></pre>
<p>The availability of specific packages within <em>Bioconductor</em> can depend
on various factors, including simple errors in entering the package
name, the packages development status, maintenance, and compatibility
with the latest version of <em>Bioconductor</em>, as well as the availability
of CRAN packages that the <em>Bioconductor</em> package depends on.</p>
<p>Package Name: <em>R</em> package names are case sensitive and must be spelt
correctly, so using <code>BiocManager::install(&quot;Celldex&quot;)</code> (with a capital
<code>C</code>) or <code>BiocManager::install(&quot;celdex&quot;)</code> (with only one <code>l</code>) would
both fail to install <code>celldex</code>; <em>R</em> will sometimes suggest the correct
name.</p>
<p><em>CRAN</em> Packages: <code>BiocManager::install()</code> tries to install packages
from CRAN and from <em>Bioconductor</em>. Check that the package is not a CRAN
package by trying to visit the CRAN landing page</p>
<ul>
<li><code>https://cran.R-project.org/package=celldex</code></li>
</ul>
<p>If this page is found, then the package is a CRAN package; see the
<a href="https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages">R-admin</a> manual section on troubleshooting CRAN package
installations.</p>
<p>Check also that the package is not a CRAN package that has been
archived and no longer available by trying to visit</p>
<ul>
<li><code>https://cran.R-project.org/src/contrib/Archive/celldex/</code></li>
</ul>
<p>If this page exists but the landing page does not, this means that
the package has been removed from CRAN. While it is possible to
install archived packages, usually the best course of action is to
identify alternative packages to accomplish the task you are
interested in. This is especially true if the Last modified date of
the most recent archived package is more than several months ago.</p>
<p>Compatibility: A <em>Bioconductor</em> package must be available for the
specific version of <em>Bioconductor</em> you are using. Try visiting the
landing page of the package for your version of <em>Bioconductor</em>,
e.g., for <em>Bioconductor</em> version 3.18 and package celldex</p>
<ul>
<li><a href="https://bioconductor.org/packages/3.18/celldex" class="uri">https://bioconductor.org/packages/3.18/celldex</a></li>
</ul>
<p>If this landing page does not exist, then the package is not available
for your version of <em>Bioconductor</em>.</p>
<p>Users may sometimes have an out-of-date version of <em>R</em> or
<em>Bioconductor</em> installed; this may be intentional (e.g., to ensure
reproducibility of existing analyses) or simply because <em>Bioconductor</em>
has not yet been updated. Try visiting the current release landing
page</p>
<ul>
<li><a href="https://bioconductor.org/packages/release/celldex" class="uri">https://bioconductor.org/packages/release/celldex</a></li>
</ul>
<p>If the release landing page exists, and it is not important that you
continue using the out-of-date version of <em>Bioconductor</em>, consider
updating <em>R</em> (if necessary) and <em>Bioconductor</em> to the current release
versions using instructions at the top of this document.</p>
<p>Packages recently contributed to <em>Bioconductor</em> are added to the
devel branch, whereas most users are configured to use the release
branch. Try visiting the devel landing page</p>
<ul>
<li><a href="https://bioconductor.org/packages/devel/celldex" class="uri">https://bioconductor.org/packages/devel/celldex</a></li>
</ul>
<p>If only the devel landing page exists, then consider updating your
installation to use the development version of <em>Bioconductor</em>. Note
that the development version is not as stable as the release version,
so should not be used for time-critical or production analysis.</p>
<p>It may be that the package you are interested in has been removed from
<em>Bioconductor</em>. Check this by visiting</p>
<ul>
<li><a href="https://bioconductor.org/about/removed-packages/" class="uri">https://bioconductor.org/about/removed-packages/</a></li>
</ul>
<p>If the package has been removed, the best course of action is to
identify alternative packages to accomplish the task you are
interested in.</p>
<p>Maintenance and Operating System Availability: A package may be
included in the release or devel version of <em>Bioconductor</em>, but
currently unavailable because it requires maintenance. This might be
indicated by a red build badge as in the image below (details of the
build problem are available by clicking on the badge). The build error
usually requires that the package maintainer correct an issue with
their package; the maintainer and email address are listed on the
package landing page.</p>
<p><img src="data:image/png;base64,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
<p>A small number of <em>Bioconductor</em> packages are not available on all
operating systems. An orange platforms badge indicates this. Click
on the badge to be taken to the Package Archives section of the
landing page; BGmix is not supported on Windows, and not available on
Intel macOS because of build-related errors. Consider using an
alternative operating system if the package is essential to your work</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaIAAACLCAYAAAAj350lAAAKpGlDQ1BJQ0MgUHJvZmlsZQAASImVlgdQU+kWx7970xstdCmhN0E6AaSEHor0aiMkAUKJMSSAiA1ZXMG1ICIC6oKuUhRcCyBrQSyIsgio2N0gi4C6LhZsoLwLDGF337z35p2ZL+c3/5zvfOfc+e6dAwCFzBII0mA5ANL5ImGYrwctJjaOhhsGaKAASEAR4FjsDAEjJCQQIDbn/24f+gE07W+bT+f69///q8lzuBlsAKAQhBM4Gex0hE8ja4QtEIoAQFUiul6WSDDNbQgrCpECEb4zzUmzPDLNCbM8ORMTEeYJABrpCk9msYRJAJA1EJ2WyU5C8pAXI2zJ5/D4CE/X65qevoqD8DGEjZEYAcLT+ekJf8mT9LecCdKcLFaSlGd7mTG8Fy9DkMZa838+jv9t6WniuTMMkUVOFvqFIR6pC7qfuipAyvyEJcFzzOPMxM9wstgvco7ZGZ5xc8xheQVI96YtCZzjRJ4PU5pHxIyYY26Gd/gcC1eFSc9KFHoy5pglnD9XnBop1ZO5TGn+nOSI6DnO5EUtmeOM1PCA+RhPqS4Uh0nr5/J9PebP9ZH2np7xl355TOleUXKEn7R31nz9XD5jPmdGjLQ2DtfLez4mUhovEHlIzxKkhUjjuWm+Uj0jM1y6V4RcyPm9IdJnmMLyD5lj4AdCAA14A2tgC6wAT8TNFk034blKsEbIS0oW0RjI28WlMflsi4U0a0trGwCm39XZq/Du/sw7CCnj5zXRBACOU4hImddW9ANwdhcASirzmh4auUbInT9PYIuFmbMaevoHA4hAFvkGqAEtoAeMgTlSmz1wBu5Ilf4gGESAWLACsEEySAdCkAVywSZQAIrATrAHlIOD4BCoAcfBSdAMzoFL4Bq4CXrAXfAISMAQeAnGwAcwAUEQDqJAVEgN0oYMIDPIGqJDrpA3FAiFQbFQPJQE8SExlAtthoqgYqgcqoJqoZ+hs9AlqBPqhR5AA9Ao9Bb6AqNgMqwIa8KG8CKYDjPgADgCXg4nwavhHDgf3g6XwdXwMbgJvgTfhO/CEvglPI4CKBJKGaWDMkfRUZ6oYFQcKhElRK1HFaJKUdWoBlQrqgN1GyVBvUJ9RmPRVDQNbY52RvuhI9Fs9Gr0evQ2dDm6Bt2EvoK+jR5Aj6G/YSgYDYwZxgnDxMRgkjBZmAJMKeYI5gzmKuYuZgjzAYvFKmONsA5YP2wsNgW7FrsNux/biG3D9mIHseM4HE4NZ4ZzwQXjWDgRrgC3D3cMdxHXhxvCfcKT8Np4a7wPPg7Px+fhS/F1+Av4PvwwfoIgRzAgOBGCCRzCGsIOwmFCK+EWYYgwQZQnGhFdiBHEFOImYhmxgXiV+Jj4jkQi6ZIcSaEkHmkjqYx0gnSdNED6TFYgm5I9ycvIYvJ28lFyG/kB+R2FQjGkuFPiKCLKdkot5TLlKeWTDFXGQoYpw5HZIFMh0yTTJ/NaliBrIMuQXSGbI1sqe0r2luwrOYKcoZynHEtuvVyF3Fm5e3Lj8lR5K/lg+XT5bfJ18p3yIwo4BUMFbwWOQr7CIYXLCoNUFFWP6kllUzdTD1OvUocUsYpGikzFFMUixeOK3YpjSgpKtkpRStlKFUrnlSTKKGVDZaZymvIO5ZPK/cpfVDRVGCpcla0qDSp9Kh9VF6i6q3JVC1UbVe+qflGjqXmrpartUmtWe6KOVjdVD1XPUj+gflX91QLFBc4L2AsKF5xc8FAD1jDVCNNYq3FIo0tjXFNL01dToLlP87LmKy1lLXetFK0SrQtao9pUbVdtnnaJ9kXtFzQlGoOWRiujXaGN6Wjo+OmIdap0unUmdI10I3XzdBt1n+gR9eh6iXoleu16Y/ra+kH6ufr1+g8NCAZ0g2SDvQYdBh8NjQyjDbcYNhuOGKkaMY1yjOqNHhtTjN2MVxtXG98xwZrQTVJN9pv0mMKmdqbJphWmt8xgM3szntl+s96FmIWOC/kLqxfeMyebM8wzzevNByyULQIt8iyaLV4v0l8Ut2jXoo5F3yztLNMsD1s+slKw8rfKs2q1emttas22rrC+Y0Ox8bHZYNNi88bWzJZre8D2vh3VLshui1273Vd7B3uhfYP9qIO+Q7xDpcM9uiI9hL6Nft0R4+jhuMHxnONnJ3snkdNJpz+dzZ1TneucRxYbLeYuPrx40EXXheVS5SJxpbnGu/7oKnHTcWO5Vbs9c9dz57gfcR9mmDBSGMcYrz0sPYQeZzw+ejp5rvNs80J5+XoVenV7K3hHepd7P/XR9UnyqfcZ87XzXevb5ofxC/Db5XePqclkM2uZY/4O/uv8rwSQA8IDygOeBZoGCgNbg+Ag/6DdQY+XGCzhL2kOBsHM4N3BT0KMQlaH/BKKDQ0JrQh9HmYVlhvWEU4NXxleF/4hwiNiR8SjSONIcWR7lGzUsqjaqI/RXtHF0ZKYRTHrYm7GqsfyYlvicHFRcUfixpd6L92zdGiZ3bKCZf3LjZZnL+9cob4ibcX5lbIrWStPxWPio+Pr4idZwaxq1ngCM6EyYYztyd7Lfslx55RwRrku3GLucKJLYnHiSJJL0u6k0WS35NLkVzxPXjnvTYpfysGUj6nBqUdTp9Ki0xrT8enx6Wf5CvxU/pVVWquyV/UKzAQFAslqp9V7Vo8JA4RHMqCM5RktIkVkKOoSG4u/Ew9kumZWZH7Kiso6lS2fzc/uWmO6Zuua4RyfnJ/Wotey17bn6uRuyh1Yx1hXtR5an7C+fYPehvwNQxt9N9ZsIm5K3fRrnmVecd77zdGbW/M18zfmD37n+119gUyBsODeFuctB79Hf8/7vnurzdZ9W78VcgpvFFkWlRZNbmNvu/GD1Q9lP0xtT9zevcN+x4Gd2J38nf273HbVFMsX5xQP7g7a3VRCKykseb9n5Z7OUtvSg3uJe8V7JWWBZS379Pft3DdZnlx+t8KjorFSo3Jr5cf9nP19B9wPNBzUPFh08MuPvB/vV/lWNVUbVpcewh7KPPT8cNThjp/oP9UeUT9SdOTrUf5RSU1YzZVah9raOo26HfVwvbh+9NiyYz3HvY63NJg3VDUqNxadACfEJ178HP9z/8mAk+2n6KcaThucrjxDPVPYBDWtaRprTm6WtMS29J71P9ve6tx65heLX46e0zlXcV7p/I4LxAv5F6Yu5lwcbxO0vbqUdGmwfWX7o8sxl+9cCb3SfTXg6vVrPtcudzA6Ll53uX6u06nz7A36jeab9jebuuy6zvxq9+uZbvvuplsOt1p6HHtaexf3Xuhz67t02+v2tTvMOzfvLrnb2x/Zf//esnuS+5z7Iw/SHrx5mPlw4tHGx5jHhU/knpQ+1Xha/ZvJb40Se8n5Aa+Brmfhzx4Nsgdf/p7x++RQ/nPK89Jh7eHaEeuRc6M+oz0vlr4Yeil4OfGq4A/5PypfG78+/af7n11jMWNDb4Rvpt5ue6f27uh72/ft4yHjTz+kf5j4WPhJ7VPNZ/rnji/RX4YnsiZxk2VfTb62fgv49ngqfWpKwBKyZkYBFLLgxEQA3h4FgBILALUHAOLS2Vl6xqDZ+X+GwH/i2Xl7xuwBqEVcxEYAApB1oA0Ag+lRFvEh7ojuDmAbG+mam3tnZvRp0x0DwEofmRyg3i+d4J82O7//pe5/eiDN+jf/L+58As7+Aj0SAAAAYmVYSWZNTQAqAAAACAACARIAAwAAAAEAAQAAh2kABAAAAAEAAAAmAAAAAAADkoYABwAAABIAAABQoAIABAAAAAEAAAGioAMABAAAAAEAAACLAAAAAEFTQ0lJAAAAU2NyZWVuc2hvdC5yyP4AAAI9aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAg
<p>Packages with landing pages from older releases but not available for
your operating system cannot be updated by the maintainer. If the
package is available in the current release and for your operating
system, consider updating to the current release of <em>Bioconductor</em>.</p>
</div>
<div id="cannot-load-biocmanager" class="section level2" number="5.2">
<h2><span class="header-section-number">5.2</span> Cannot load <em>BiocManager</em></h2>
<p>After updating <em>R</em> (e.g., from <em>R</em> version 3.5.x to <em>R</em> version 3.6.x
at the time of writing this) and trying to load <code>BiocManager</code>, <em>R</em>
replies</p>
<pre><code>Error: .onLoad failed in loadNamespace() for &#39;BiocManager&#39;, details:
call: NULL
error: Bioconductor version &#39;3.8&#39; requires R version &#39;3.5&#39;; see
https://bioconductor.org/install</code></pre>
<p>This problem arises because <code>BiocManager</code> uses a second package,
<code>BiocVersion</code>, to indicate the version of <em>Bioconductor</em> in use. In
the original installation, <code>BiocManager</code> had installed <code>BiocVersion</code>
appropriate for <em>R</em> version 3.5. With the update, the version of
<em>Bioconductor</em> indicated by <code>BiocVersion</code> is no longer valid youll
need to update <code>BiocVersion</code> and all <em>Bioconductor</em> packages to the
most recent version available for your new version of <em>R</em>.</p>
<p>The recommended practice is to maintain a separate library for each
<em>R</em> and <em>Bioconductor</em> version. So instead of installing packages into
<em>R</em>s system library (e.g., as administrator), install only base <em>R</em>
into the system location. Then use aliases or other approaches to
create <em>R</em> / <em>Bioconductor</em> version-specific installations. This is
described in the section on <a href="#multiple-versions">maintaining multiple
versions</a> of <em>R</em> and <em>Bioconductor</em>.</p>
<p>Alternatively, one could update all <em>Bioconductor</em> packages in the
previous installation directory. The problem with this is that the
previous version of <em>Bioconductor</em> is removed, compromising the
ability to reproduce earlier results. Update all <em>Bioconductor</em>
packages in the previous installation directory by removing <em>all</em>
versions of <code>BiocVersion</code></p>
<pre><code>remove.packages(&quot;BiocVersion&quot;) # repeat until all instances removed</code></pre>
<p>Then install the updated <code>BiocVersion</code>, and update all <em>Bioconductor</em>
packages; answer yes when you are asked to update a potentially
large number of <em>Bioconductor</em> packages.</p>
<pre class="r"><code>BiocManager::install()</code></pre>
<p>Confirm that the updated <em>Bioconductor</em> is valid for your version of
<em>R</em></p>
<pre class="r"><code>BiocManager::valid()</code></pre>
</div>
<div id="timeout-during-package-download" class="section level2" number="5.3">
<h2><span class="header-section-number">5.3</span> Timeout during package download</h2>
<p>Large packages can take a long time to downloaded over poor internet
connects. The BiocManager package sets the time limit to 300 seconds,
using <code>options(timeout = 300)</code>. Only part of a package may download,
e.g., only 15.1 of 79.4 MB in the example below</p>
<pre><code>trying URL &#39;https://bioconductor.org/packages/3.12/data/annotation/src/contrib/org.Hs.eg.db_3.12.0.tar.gz&#39;
Content type &#39;application/x-gzip&#39; length 83225518 bytes (79.4 MB)
=========
downloaded 15.1 MB</code></pre>
<p>or perhaps with a warning (often difficult to see in the output)</p>
<pre><code>Error in download.file(url, destfile, method, mode = &quot;wb&quot;, ...) :
...
...: Timeout of 300 seconds was reached
...</code></pre>
<p>Try increasing the download timeout, e.g, <code>options(timeout = 600)</code>.</p>
</div>
<div id="multiple-biocversion-installations" class="section level2" number="5.4">
<h2><span class="header-section-number">5.4</span> Multiple <code>BiocVersion</code> installations</h2>
<p>One potential problem occurs when there are two or more <code>.libPaths()</code>,
with more than one BiocVersion package installed. This might occur for
instance if a system administrator installed BiocVersion, and then a
user installed their own version. In this circumstance, it seems
appropriate to standardize the installation by repeatedly calling
<code>remove.packages(&quot;BiocVersion&quot;)</code> until all versions are removed, and
then installing the desired version.</p>
</div>
<div id="errors-determining-bioconductor-version" class="section level2" number="5.5">
<h2><span class="header-section-number">5.5</span> Errors determining <em>Bioconductor</em> version</h2>
<p>An essential task for <em>BiocManager</em> is to determine that the version
of <em>Bioconductor</em> is appropriate for the version of <em>R</em>. Several
errors can occur when this task fails.</p>
<ul>
<li><p>Bioconductor version cannot be determined; no internet connection?
When the <em>Bioconductor</em> version cannot be obtained from the version
map hosted at <a href="https://bioconductor.org/config.yaml" class="uri">https://bioconductor.org/config.yaml</a>, this error will
occur. It may be a result of poor internet connectivity or offline
use. See the <a href="#offline-config.yaml">offline config.yaml</a> section
above.</p></li>
<li><p>Bioconductor version cannot be validated; no internet connection?
Usually occurs when the map is unable to be downloaded possibly due
to a missing <code>BIOCONDUCTOR_CONFIG_FILE</code>. For offline use, a copy of
the configuration file should be downloaded and its address set to
the environment variable or option.</p></li>
<li><p>Bioconductor version map cannot be validated; is it misconfigured?
On <em>rare</em> occasion, the version map hosted at
<a href="https://bioconductor.org/config.yaml" class="uri">https://bioconductor.org/config.yaml</a> may be misconfigured. The check
ensures that all the version name tags, i.e., out-of-date, release,
devel, and future are in the map.</p></li>
<li><p>Bioconductor version cannot be validated; is type input
mis-specified? The type input refers to the version name inputs,
mainly release and devel. This error is chiefly due to internal
logic and is not due to user error. Please open a <a href="https://github.com/Bioconductor/BiocManager/issues">GitHub
issue</a>.</p></li>
</ul>
</div>
</div>
<div id="session-information" class="section level1" number="6">
<h1><span class="header-section-number">6</span> Session information</h1>
<pre class="r"><code>sessionInfo()</code></pre>
<pre><code>## R Under development (unstable) (2024-08-21 r87038)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 22.04.4 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: America/New_York
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] BiocStyle_2.32.1
##
## loaded via a namespace (and not attached):
## [1] digest_0.6.35 R6_2.5.1 bookdown_0.39
## [4] fastmap_1.1.1 xfun_0.43 cachem_1.0.8
## [7] knitr_1.46 htmltools_0.5.8.1 rmarkdown_2.26
## [10] lifecycle_1.0.4 cli_3.6.2 sass_0.4.9
## [13] jquerylib_0.1.4 compiler_4.5.0 highr_0.10
## [16] tools_4.5.0 evaluate_0.23 bslib_0.7.0
## [19] yaml_2.3.8 BiocManager_1.30.25 jsonlite_1.8.8
## [22] rlang_1.1.3</code></pre>
</div>
</div>
<script>
// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
$('tr.odd').parent('tbody').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
bootstrapStylePandocTables();
});
</script>
<!-- tabsets -->
<script>
$(document).ready(function () {
window.buildTabsets("TOC");
});
$(document).ready(function () {
$('.tabset-dropdown > .nav-tabs > li').click(function () {
$(this).parent().toggleClass('nav-tabs-open');
});
});
</script>
<!-- code folding -->
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
"HTML-CSS": {
styles: {
".MathJax_Display": {
"text-align": "center",
padding: "0px 150px 0px 65px",
margin: "0px 0px 0.5em"
},
"@media screen and (max-width: 991px)": {
".MathJax_Display": {
"text-align": "center",
padding: "0 0 0 0"
}
}
}
}
});
</script>
<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
(function () {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
document.getElementsByTagName("head")[0].appendChild(script);
})();
</script>
<script type="text/javascript">
$(document).ready(function () {
// Map "enter" keypress to the same action as a cursor click
function navigateLink(e) {
if (e.key === "Enter") {
$(this).trigger("click");
}
}
var toc_items = document.querySelectorAll(".tocify-item");
for (var i = 0; i < toc_items.length; i++) {
// The link role tells screen readers this is for navigation
toc_items.item(i).setAttribute("role", "link");
// tabindex = 0 allows selection via keyboard tab presses
toc_items.item(i).setAttribute("tabindex", "0");
// Listen for "Enter" keypress when item is selected
toc_items.item(i).addEventListener("keydown", navigateLink);
}
});
</script>
</body>
</html>