使用';[';方括号作为R中Lappy的函数

使用';[';方括号作为R中Lappy的函数,r,R,我已经看到了R中使用的函数lappy,用于从矩阵列表中存在的矩阵中提取元素 例如,我有一个3(2x2)个矩阵的列表,我想从这3个矩阵中提取元素[1,2] 代码:list1=lapply(mylist,[',1,2)工作正常。它返回一个包含这3个元素的列表 我正试图研究这到底在做什么。谷歌没有帮助,在R帮助中使用?“['也不太容易解释。我不知道”['在R中是一个函数,所以代码不是直观的。R中的运算符只是函数 这些是等效的: > x <- list(a=1,b=2) > x[1]

我已经看到了R中使用的函数
lappy
,用于从矩阵列表中存在的矩阵中提取元素

例如,我有一个3(2x2)个矩阵的列表,我想从这3个矩阵中提取元素[1,2]

代码:
list1=lapply(mylist,[',1,2)
工作正常。它返回一个包含这3个元素的列表


我正试图研究这到底在做什么。谷歌没有帮助,在R帮助中使用
?“['
也不太容易解释。我不知道
”['
在R中是一个函数,所以代码不是直观的。

R中的运算符只是函数

这些是等效的:

> x <- list(a=1,b=2)
> x[1]
$a
[1] 1

> `[`(x,1)
$a
[1] 1

+
=
等运算符以及其他运算符都以这种方式工作。

方括号实际上是一个函数,其第一个参数是要子集的对象。后续参数是该子集的索引

# 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! 
现在,看看
lappy
的参数:

args(lapply)
# function (X, FUN, ...) 
这些点中表示的所有内容都作为参数传递给函数
FUN


因此,当
FUN=“[”
时,
“[”
的第一个参数是列表的当前元素(正在迭代),即被子集的对象[绝对是一个函数。也有赋值函数(例如:
[R中的所有东西都是一个对象……如果它做了什么,那么对象的类型就是函数。很好的解释-举一个“其他操作符”的例子,
”/“(1,2)
1/2
do.call(“/”,list(1,2))
所有函数都给出相同的结果。关于带星号的函数,请参见@thelatemail In base,有
Reduce('/',list(1,2))
Map('/',1,2)
和所有*
应用的
函数,也可以将函数作为参数,甚至更多(?)。。。
args(lapply)
# function (X, FUN, ...)