(window.webpackJsonp=window.webpackJsonp||[]).push([[2966],{3374:function(t,s,a){"use strict";a.r(s);var n=a(31),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"subsetting"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#subsetting"}},[t._v("#")]),t._v(" Subsetting")]),t._v(" "),a("p",[t._v("Given an R object, we may require separate analysis for one or more parts of the data contained in it. The process of obtaining these parts of the data from a given object is called "),a("code",[t._v("subsetting")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"data-frames"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#data-frames"}},[t._v("#")]),t._v(" Data frames")]),t._v(" "),a("p",[a("strong",[t._v("Subsetting a data frame into a smaller data frame")]),t._v(" can be accomplished the same as subsetting a list.")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" data.frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" stringsAsFactors "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## x y")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 1 a")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2 2 b")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 3 3 c")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset a variable by number")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## x")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2 2")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 3 3")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset a variable by name ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## x")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2 2")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 3 3")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" is.data.frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## TRUE")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" is.list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## TRUE")]),t._v("\n\n")])])]),a("p",[a("strong",[t._v("Subsetting a dataframe into a column vector")]),t._v(" can be accomplished using double brackets [[ ]] or the dollar sign operator $.")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset a variable by number using [[ ]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"y"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset a variable by name using [[ ]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("$")]),t._v("x "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset a variable by name using $")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 1 2 3")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" typeof"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("$")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## "integer"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" is.vector"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("$")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## TRUE")]),t._v("\n\n")])])]),a("p",[a("strong",[t._v("Subsetting a data as a two dimensional matrix")]),t._v(" can be accomplished using "),a("code",[t._v("i")]),t._v(" and "),a("code",[t._v("j")]),t._v(" terms.")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset row and column by number")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"y"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset row by number and column by name")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset entire row by number ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## x y")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2 2 b")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Subset all first variables ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 1 2 3")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" drop "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## x")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2 2")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 3 3")]),t._v("\n\n")])])]),a("p",[t._v("Note: Subsetting by "),a("code",[t._v("j")]),t._v(" (column) alone simplifies to the variable's own type, but subsetting by "),a("code",[t._v("i")]),t._v(" alone returns a "),a("code",[t._v("data.frame")]),t._v(", as the different variables may have different types and classes. Setting the "),a("code",[t._v("drop")]),t._v(" parameter to "),a("code",[t._v("FALSE")]),t._v(" keeps the data frame.")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" is.vector"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## TRUE")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" is.data.frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## TRUE")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" is.data.frame"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("df3"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" drop "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## TRUE")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"atomic-vectors"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#atomic-vectors"}},[t._v("#")]),t._v(" Atomic vectors")]),t._v(" "),a("p",[t._v("Atomic vectors (which excludes lists and expressions, which are also vectors) are subset using the "),a("code",[t._v("[")]),t._v(" operator:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# create an example vector")]),t._v("\nv1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# select the third element")]),t._v("\nv1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "c"')]),t._v("\n\n")])])]),a("p",[t._v("The "),a("code",[t._v("[")]),t._v(" operator can also take a vector as the argument. For example, to select the first and third elements:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("v1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nv1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "c"')]),t._v("\n\n")])])]),a("p",[t._v("Some times we may require to omit a particular value from the vector. This can be achieved using a negative sign("),a("code",[t._v("-")]),t._v(") before the index of that value. For example, to omit to omit the first value from v1, use "),a("code",[t._v("v1[-1]")]),t._v(". This can be extended to more than one value in a straight forward way. For example, "),a("code",[t._v("v1[-c(1,3)]")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" v1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" v1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),t._v("\n\n")])])]),a("p",[t._v("On some occasions, we would like to know, especially, when the length of the vector is large, index of a particular value, if it exists:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" v1"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" which"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v1"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n\n")])])]),a("p",[t._v("If the atomic vector has names (a "),a("code",[t._v("names")]),t._v(" attribute), it can be subset using a character vector of names:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("v "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nnames"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"one"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"two"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"three"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nv\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## one two three ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 2 3 ")]),t._v("\n\nv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"two"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## two ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2")]),t._v("\n\n")])])]),a("p",[t._v("The "),a("code",[t._v("[[")]),t._v(" operator can also be used to index atomic vectors, with differences in that it accepts a indexing vector with a length of one and strips any names present:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Error in v[[c(1, 2)]] : ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## attempt to select more than one element in vectorIndex")]),t._v("\n\nv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"two"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 2")]),t._v("\n\n")])])]),a("p",[t._v("Vectors can also be subset using a logical vector. In contrast to subsetting with numeric and character vectors, the logical vector used to subset has to be equal to the length of the vector whose elements are extracted, so if a logical vector "),a("code",[t._v("y")]),t._v(" is used to subset "),a("code",[t._v("x")]),t._v(", i.e. "),a("code",[t._v("x[y]")]),t._v(", if "),a("code",[t._v("length(y) < length(x)")]),t._v(" then "),a("code",[t._v("y")]),t._v(" will be recycled to match "),a("code",[t._v("length(x)")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## one three ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 3 ")]),t._v("\n\nv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# recycled to 'c(FALSE, TRUE, FALSE)'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## two ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 2 ")]),t._v("\n\nv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# recycled to 'c(TRUE, TRUE, TRUE)'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## one two three ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 1 2 3 ")]),t._v("\n\nv"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# handy to discard elements but save the vector's type and basic structure")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## named integer(0)")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"matrices"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#matrices"}},[t._v("#")]),t._v(" Matrices")]),t._v(" "),a("p",[t._v("For each dimension of an object, the "),a("code",[t._v("[")]),t._v(" operator takes one argument. Vectors have one dimension and take one argument. Matrices and data frames have two dimensions and take two arguments, given as "),a("code",[t._v("[i, j]")]),t._v(" where "),a("code",[t._v("i")]),t._v(" is the row and "),a("code",[t._v("j")]),t._v(" is the column. Indexing starts at 1.")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## a sample matrix")]),t._v("\nmat "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" matrix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nrow "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dimnames "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"row1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"row2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"col1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"col2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"col3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nmat\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# col1 col2 col3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row1 1 3 5")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row2 2 4 6")]),t._v("\n\n")])])]),a("p",[a("code",[t._v("mat[i,j]")]),t._v(" is the element in the "),a("code",[t._v("i")]),t._v("-th row, "),a("code",[t._v("j")]),t._v("-th column of the matrix "),a("code",[t._v("mat")]),t._v(". For example, an "),a("code",[t._v("i")]),t._v(" value of "),a("code",[t._v("2")]),t._v(" and a "),a("code",[t._v("j")]),t._v(" value of "),a("code",[t._v("1")]),t._v(" gives the number in the second row and the first column of the matrix. Omitting "),a("code",[t._v("i")]),t._v(" or "),a("code",[t._v("j")]),t._v(" returns all values in that dimension.")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("mat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## row1 row2 ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## 5 6 ")]),t._v("\n\nmat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# col1 col2 col3 ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 1 3 5 ")]),t._v("\n\n")])])]),a("p",[t._v("When the matrix has row or column names (not required), these can be used for subsetting:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("mat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'col1'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row1 row2 ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# 1 2 ")]),t._v("\n\n")])])]),a("p",[t._v("By default, the result of a subset will be simplified if possible. If the subset only has one dimension, as in the examples above, the result will be a one-dimensional vector rather than a two-dimensional matrix. This default can be overriden with the "),a("code",[t._v("drop = FALSE")]),t._v(" argument to "),a("code",[t._v("[")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## This selects the first row as a vector")]),t._v("\nclass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('# [1] "integer"')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Whereas this selects the first row as a 1x3 matrix:")]),t._v("\nclass"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("mat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" drop "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" F"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('# [1] "matrix"')]),t._v("\n\n")])])]),a("p",[t._v("Of course, dimensions cannot be dropped if the selection itself has two dimensions:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("mat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## A 2x2 matrix")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# col2 col3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row1 3 5")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row2 4 6")]),t._v("\n\n")])])]),a("h3",{attrs:{id:"selecting-individual-matrix-entries-by-their-positions"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#selecting-individual-matrix-entries-by-their-positions"}},[t._v("#")]),t._v(" Selecting individual matrix entries by their positions")]),t._v(" "),a("p",[t._v("It is also possible to use a Nx2 matrix to select N individual elements from a matrix (like how a coordinate system works). If you wanted to extract, in a vector, the entries of a matrix in the "),a("code",[t._v("(1st row, 1st column), (1st row, 3rd column), (2nd row, 3rd column), (2nd row, 1st column)")]),t._v(" this can be done easily by creating a index matrix with those coordinates and using that to subset the matrix:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("mat\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# col1 col2 col3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row1 1 3 5")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# row2 2 4 6")]),t._v("\n\nind "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" rbind"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nind\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [,1] [,2]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [1,] 1 1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [2,] 1 3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [3,] 2 3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [4,] 2 1")]),t._v("\n\nmat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("ind"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# [1] 1 5 6 2")]),t._v("\n\n")])])]),a("p",[t._v("In the above example, the 1st column of the "),a("code",[t._v("ind")]),t._v(" matrix refers to rows in "),a("code",[t._v("mat")]),t._v(", the 2nd column of "),a("code",[t._v("ind")]),t._v(" refers to columns in "),a("code",[t._v("mat")]),t._v(".")]),t._v(" "),a("h2",{attrs:{id:"lists"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#lists"}},[t._v("#")]),t._v(" Lists")]),t._v(" "),a("p",[t._v("A list can be subset with "),a("code",[t._v("[")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'two'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nl1\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[1]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 1 2 3")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## $two")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("##")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[3]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[3]][[1]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 10")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("##")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[3]][[2]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 20")]),t._v("\n\nl1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[1]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 1 2 3")]),t._v("\n\nl1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'two'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## $two")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\nl1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\nl1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'two'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\n")])])]),a("p",[t._v("Note the result of "),a("code",[t._v("l1[2]")]),t._v(" is still a list, as the "),a("code",[t._v("[")]),t._v(" operator selects elements of a list, returning a smaller list. The "),a("code",[t._v("[[")]),t._v(" operator extracts list elements, returning an object of the type of the list element.")]),t._v(" "),a("p",[t._v("Elements can be indexed by number or a character string of the name (if it exists). Multiple elements can be selected with "),a("code",[t._v("[")]),t._v(" by passing a vector of numbers or strings of names. Indexing with a vector of "),a("code",[t._v("length > 1")]),t._v(" in "),a("code",[t._v("[")]),t._v(" and "),a("code",[t._v("[[")]),t._v(' returns a "list" with the specified elements and a recursive subset (if available), '),a("strong",[t._v("respectively")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[1]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[1]][[1]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 10")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[1]][[2]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 20")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[2]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 1 2 3")]),t._v("\n\n")])])]),a("p",[t._v("Compared to:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 10")]),t._v("\n\n")])])]),a("p",[t._v("which is equivalent to:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 10")]),t._v("\n\n")])])]),a("p",[t._v("The "),a("code",[t._v("$")]),t._v(" operator allows you to select list elements solely by name, but unlike "),a("code",[t._v("[")]),t._v(" and "),a("code",[t._v("[[")]),t._v(", does not require quotes. As an infix operator, "),a("code",[t._v("$")]),t._v(" can only take a single name:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("$")]),t._v("two\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\n")])])]),a("p",[t._v("Also, the "),a("code",[t._v("$")]),t._v(" operator allows for partial matching by default:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("$")]),t._v("t\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\n")])])]),a("p",[t._v("in contrast with "),a("code",[t._v("[[")]),t._v(" where it needs to be specified whether partial matching is allowed:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"t"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## NULL")]),t._v("\nl1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"t"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" exact "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n\n")])])]),a("p",[t._v("Setting "),a("code",[t._v("options(warnPartialMatchDollar = TRUE)")]),t._v(', a "warning" is given when partial matching happens with '),a("code",[t._v("$")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("l1"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("$")]),t._v("t\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('## [1] "a" "b" "c"')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Warning message:")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## In l1$t : partial match of 't' to 'two'")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"other-objects"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#other-objects"}},[t._v("#")]),t._v(" Other objects")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("[")]),t._v(" and "),a("code",[t._v("[[")]),t._v(" operators are primitive functions that are generic. This means that any "),a("strong",[t._v("object")]),t._v(" in R (specifically "),a("code",[t._v("isTRUE(is.object(x))")]),t._v(' --i.e. has an explicit "class" attribute) can have its own specified behaviour when subsetted; i.e. has its own '),a("strong",[t._v("methods")]),t._v(" for "),a("code",[t._v("[")]),t._v(" and/or "),a("code",[t._v("[[")]),t._v(".")]),t._v(" "),a("p",[t._v('For example, this is the case with "data.frame" ('),a("code",[t._v("is.object(iris)")]),t._v(") objects where "),a("code",[t._v("[.data.frame")]),t._v(" and "),a("code",[t._v("[[.data.frame")]),t._v(' methods are defined and they are made to exhibit both "matrix"-like and "list"-like subsetting. With forcing an error when subsetting a "data.frame", we see that, actually, a function '),a("code",[t._v("[.data.frame")]),t._v(" was called when we -just- used "),a("code",[t._v("[")]),t._v(".")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("iris"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("invalidArgument"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Error in `[.data.frame`(iris, invalidArgument, ) : ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## object 'invalidArgument' not found")]),t._v("\n\n")])])]),a("p",[t._v("Without further details on the current topic, an example"),a("code",[t._v("[")]),t._v(" method:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" structure"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" class "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"myClass"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 3 2 4")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'[.myClass'")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("function")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" cat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sprintf"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"We'd expect '%s[%s]' to be returned but this a custom `[` method and should have a `?[.myClass` help page for its behaviour\\n\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deparse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("substitute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deparse"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("substitute"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## We'd expect 'x[c(3, 2, 4)]' to be returned but this a custom `[` method and should have a `?[.myClass` help page for its behaviour")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## NULL")]),t._v("\n\n")])])]),a("p",[t._v("We can overcome the method dispatching of "),a("code",[t._v("[")]),t._v(" by using the equivalent non-generic "),a("code",[t._v(".subset")]),t._v(" (and "),a("code",[t._v(".subset2")]),t._v(" for "),a("code",[t._v("[[")]),t._v('). This is especially useful and efficient when programming our own "class"es and want to avoid work-arounds (like '),a("code",[t._v("unclass(x)")]),t._v(') when computing on our "class"es efficiently (avoiding method dispatch and copying objects):')]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v(".subset"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] 3 2 4")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"vector-indexing"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#vector-indexing"}},[t._v("#")]),t._v(" Vector indexing")]),t._v(" "),a("p",[t._v("For this example, we will use the vector:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("13")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("17")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("18")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("19")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),t._v("\n\n")])])]),a("p",[t._v("R vectors are 1-indexed, so for example "),a("code",[t._v("x[1]")]),t._v(" will return "),a("code",[t._v("11")]),t._v(". We can also extract a sub-vector of "),a("code",[t._v("x")]),t._v(" by passing a vector of indices to the bracket operator:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),t._v("\n\n")])])]),a("p",[t._v("If we pass a vector of negative indices, R will return a sub-vector with the specified indices excluded:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("17")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("18")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("19")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),t._v("\n\n")])])]),a("p",[t._v("We can also pass a boolean vector to the bracket operator, in which case it returns a sub-vector corresponding to the coordinates where the indexing vector is "),a("code",[t._v("TRUE")]),t._v(":")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("rep"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("13")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),t._v("\n\n")])])]),a("p",[t._v("If the indexing vector is shorter than the length of the array, then it will be repeated, as in:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("13")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("17")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("19")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("TRUE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("FALSE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("17")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),t._v("\n\n")])])]),a("h2",{attrs:{id:"elementwise-matrix-operations"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#elementwise-matrix-operations"}},[t._v("#")]),t._v(" Elementwise Matrix Operations")]),t._v(" "),a("p",[t._v("Let A and B be two matrices of same dimension. The operators "),a("code",[t._v("+")]),t._v(","),a("code",[t._v("-")]),t._v(","),a("code",[t._v("/")]),t._v(","),a("code",[t._v("*")]),t._v(","),a("code",[t._v("^")]),t._v(" when used with matrices of same dimension perform the required operations on the corresponding elements of the matrices and return a new matrix of the same dimension. These operations are usually referred to as element-wise operations.")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Operator")]),t._v(" "),a("th",[t._v("A op B")]),t._v(" "),a("th",[t._v("Meaning")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("+")]),t._v(" "),a("td",[t._v("A + B")]),t._v(" "),a("td",[t._v("Addition of corresponding elements of A and B")])]),t._v(" "),a("tr",[a("td",[t._v("-")]),t._v(" "),a("td",[t._v("A - B")]),t._v(" "),a("td",[t._v("Subtracts the elements of B from the corresponding elements of A")])]),t._v(" "),a("tr",[a("td",[t._v("/")]),t._v(" "),a("td",[t._v("A / B")]),t._v(" "),a("td",[t._v("Divides the elements of A by the corresponding elements of B")])]),t._v(" "),a("tr",[a("td",[t._v("*")]),t._v(" "),a("td",[t._v("A * B")]),t._v(" "),a("td",[t._v("Multiplies the elements of A by the corresponding elements of B")])]),t._v(" "),a("tr",[a("td",[t._v("^")]),t._v(" "),a("td",[t._v("A^(-1)")]),t._v(" "),a("td",[t._v("For example, gives a matrix whose elements are reciprocals of A")])])])]),t._v(" "),a("p",[t._v('For "true" matrix multiplication, as seen in '),a("strong",[t._v("Linear Algebra")]),t._v(", use "),a("code",[t._v("%*%")]),t._v(". For example, multiplication of A with B is: "),a("code",[t._v("A %*% B")]),t._v(". The dimensional requirements are that the "),a("code",[t._v("ncol()")]),t._v(" of "),a("code",[t._v("A")]),t._v(" be the same as "),a("code",[t._v("nrow()")]),t._v(" of "),a("code",[t._v("B")])]),t._v(" "),a("h3",{attrs:{id:"some-functions-used-with-matrices"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#some-functions-used-with-matrices"}},[t._v("#")]),t._v(" "),a("strong",[t._v("Some Functions used with Matrices")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("Function")]),t._v(" "),a("th",[t._v("Example")]),t._v(" "),a("th",[t._v("Purpose")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("nrow()")]),t._v(" "),a("td",[t._v("nrow(A)")]),t._v(" "),a("td",[t._v("determines the number of rows of A")])]),t._v(" "),a("tr",[a("td",[t._v("ncol()")]),t._v(" "),a("td",[t._v("ncol(A)")]),t._v(" "),a("td",[t._v("determines the number of columns of A")])]),t._v(" "),a("tr",[a("td",[t._v("rownames()")]),t._v(" "),a("td",[t._v("rownames(A)")]),t._v(" "),a("td",[t._v("prints out the row names of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("colnames()")]),t._v(" "),a("td",[t._v("colnames(A)")]),t._v(" "),a("td",[t._v("prints out the column names of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("rowMeans()")]),t._v(" "),a("td",[t._v("rowMeans(A)")]),t._v(" "),a("td",[t._v("computes means of each row of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("colMeans()")]),t._v(" "),a("td",[t._v("colMeans(A)")]),t._v(" "),a("td",[t._v("computes means of each column of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("upper.tri()")]),t._v(" "),a("td",[t._v("upper.tri(A)")]),t._v(" "),a("td",[t._v("returns a vector whose elements are the upper")])]),t._v(" "),a("tr",[a("td"),t._v(" "),a("td"),t._v(" "),a("td",[t._v("triangular matrix of square matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("lower.tri()")]),t._v(" "),a("td",[t._v("lower.tri(A)")]),t._v(" "),a("td",[t._v("returns a vector whose elements are the lower")])]),t._v(" "),a("tr",[a("td"),t._v(" "),a("td"),t._v(" "),a("td",[t._v("triangular matrix of square matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("det()")]),t._v(" "),a("td",[t._v("det(A)")]),t._v(" "),a("td",[t._v("results in the determinant of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("solve()")]),t._v(" "),a("td",[t._v("solve(A)")]),t._v(" "),a("td",[t._v("results in the inverse of the non-singular matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("diag()")]),t._v(" "),a("td",[t._v("diag(A)")]),t._v(" "),a("td",[t._v("returns a diagonal matrix whose off-diagnal elemts are zeros and")])]),t._v(" "),a("tr",[a("td"),t._v(" "),a("td"),t._v(" "),a("td",[t._v("diagonals are the same as that of the square matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("t()")]),t._v(" "),a("td",[t._v("t(A)")]),t._v(" "),a("td",[t._v("returns the the transpose of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("eigen()")]),t._v(" "),a("td",[t._v("eigen(A)")]),t._v(" "),a("td",[t._v("retuens the eigenvalues and eigenvectors of the matrix A")])]),t._v(" "),a("tr",[a("td",[t._v("is.matrix()")]),t._v(" "),a("td",[t._v("is.matrix(A)")]),t._v(" "),a("td",[t._v("returns TRUE or FALSE depending on whether A is a matrix or not.")])]),t._v(" "),a("tr",[a("td",[t._v("as.matrix()")]),t._v(" "),a("td",[t._v("as.matrix(x)")]),t._v(" "),a("td",[t._v("creates a matrix out of the vector x")])])])]),t._v(" "),a("h4",{attrs:{id:"remarks"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#remarks"}},[t._v("#")]),t._v(" Remarks")]),t._v(" "),a("p",[a("strong",[t._v("Missing values:")])]),t._v(" "),a("p",[t._v("Missing values ("),a("code",[t._v("NA")]),t._v("s) used in subsetting with "),a("code",[t._v("[")]),t._v(" return "),a("code",[t._v("NA")]),t._v(" since a "),a("code",[t._v("NA")]),t._v(" index")]),t._v(" "),a("blockquote"),t._v(" "),a("p",[t._v("picks an unknown element and so returns NA in the corresponding element..")]),t._v(" "),a("p",[t._v('The "default" type of '),a("code",[t._v("NA")]),t._v(' is "logical" ('),a("code",[t._v("typeof(NA)")]),t._v(') which means that, as any "logical" vector used in subsetting, will be '),a("strong",[t._v("recycled")]),t._v(" to match the length of the subsetted object. So "),a("code",[t._v("x[NA]")]),t._v(" is equivalent to "),a("code",[t._v("x[as.logical(NA)]")]),t._v(" which is equivalent to "),a("code",[t._v("x[rep_len(as.logical(NA), length(x))]")]),t._v(" and, consequently, it returns a missing value ("),a("code",[t._v("NA")]),t._v(") for each element of "),a("code",[t._v("x")]),t._v(". As an example:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("x "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] NA NA NA")]),t._v("\n\n")])])]),a("p",[t._v('While indexing with "numeric"/"integer" '),a("code",[t._v("NA")]),t._v(" picks a single "),a("code",[t._v("NA")]),t._v(" element (for each "),a("code",[t._v("NA")]),t._v(" in index):")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("x"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("as.integer"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] NA")]),t._v("\n\nx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NA")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] NA 1 NA NA")]),t._v("\n\n")])])]),a("p",[a("strong",[t._v("Subsetting out of bounds:")])]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("[")]),t._v(" operator, with one argument passed, allows indices that are "),a("code",[t._v("> length(x)")]),t._v(" and returns "),a("code",[t._v("NA")]),t._v(" for atomic vectors or "),a("code",[t._v("NULL")]),t._v(" for generic vectors. In contrast, with "),a("code",[t._v("[[")]),t._v(" and when "),a("code",[t._v("[")]),t._v(" is passed more arguments (i.e. subsetting out of bounds objects with "),a("code",[t._v("length(dim(x)) > 2")]),t._v(") an error is returned:")]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] NA")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Error in (1:3)[[10]] : subscript out of bounds")]),t._v("\nas.matrix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [1] NA")]),t._v("\nas.matrix"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Error in as.matrix(1:3)[, 10] : subscript out of bounds")]),t._v("\nlist"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## [[1]]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## NULL")]),t._v("\nlist"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## Error in list(1, 2, 3)[[10]] : subscript out of bounds")]),t._v("\n\n")])])]),a("p",[t._v('The behaviour is the same when subsetting with "character" vectors, that are not matched in the "names" attribute of the object, too:')]),t._v(" "),a("div",{staticClass:"language-r extra-class"},[a("pre",{pre:!0,attrs:{class:"language-r"}},[a("code",[t._v("c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## NA ")]),t._v("\nlist"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## ")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("## NULL")]),t._v("\n\n")])])]),a("p",[a("strong",[t._v("Help topics:")])]),t._v(" "),a("p",[t._v("See "),a("code",[t._v("?Extract")]),t._v(" for further information.")])])}),[],!1,null,null,null);s.default=e.exports}}]);