我已经看到lapplyR中使用的函数从矩阵列表中的矩阵中提取元素.
例如,我有一个3(2x2)矩阵的列表,我想从这3个矩阵中的每一个中提取元素[1,2].
代码:list1 = lapply(mylist, '[', 1,2)工作正常.它返回包含这3个元素的列表.
我正在努力研究这是做什么的.谷歌没有帮助和使用?'['R的帮助不是太解释.我不知道'['R中的函数是怎么样的,所以代码不直观.
Ric*_*rta 39
方括号实际上是一个函数,其第一个参数是被子集化的对象.后续参数是该子集的索引.
# For example, if M is a matrix
M[1, 2] # extracts the element at row 1, col 2
# is the same as
`[`(M, 1, 2)
# Try them!
Run Code Online (Sandbox Code Playgroud)
现在,看一下以下参数lapply:
args(lapply)
# function (X, FUN, ...)
Run Code Online (Sandbox Code Playgroud)
这些点中表示的所有内容都FUN作为参数传递给函数.
因此,当FUN="["第一个参数为"["列表的当前元素(被迭代)时,即,对象被子集化.而后续的参数是索引"["
Ari*_*man 22
R中的运算符只是函数.
这些是等价的:
> x <- list(a=1,b=2)
> x[1]
$a
[1] 1
> `[`(x,1)
$a
[1] 1
Run Code Online (Sandbox Code Playgroud)
反引号只是为了防止解析器的解释(例如,告诉它它是一个函数名,而不是开始[过早地解释).
作为一个函数,它遵循相同的面向对象规则(在本例中为S3)作为其他一切.
> methods(`[`)
[1] [.acf* [.arrow* [.AsIs [.bibentry* [.cluster* [.data.frame [.data.table*
[8] [.Date [.difftime [.envlist* [.factor [.formula* [.fractions* [.getAnywhere*
[15] [.gList* [.gpar* [.gtable* [.hexmode [.idf* [.indexed* [.insensitive*
[22] [.ITime* [.listof [.noquote [.numeric_version [.octmode [.pdf_doc* [.person*
[29] [.POSIXct [.POSIXlt [.quoted* [.raster* [.roman* [.shingle* [.simple.list
[36] [.split* [.terms* [.trellis* [.ts* [.tskernel* [.uneval* [.unit*
[43] [.unit.arithmetic* [.unit.list* [.vpPath*
Non-visible functions are asterisked
Run Code Online (Sandbox Code Playgroud)
+,=等等和其他运营商也都这样工作.