我已經看到在R中使用的函數lapply
可以從存在於矩陣列表中的矩陣中提取元素。在R中使用'['方括號作爲lapply的函數R
E.g.我有一個3(2×2)矩陣的列表,我想從這3個矩陣的每一箇中提取元素[1,2]。
該代碼:list1 = lapply(mylist, '[', 1,2)
工作得很好。它返回一個包含這3個元素的列表。
我在努力研究這正是在做什麼。谷歌沒有幫助,在R的幫助中使用?'['
不是太明顯。我沒有看到'['
是R中的一個函數,所以代碼並不直觀。
我已經看到在R中使用的函數lapply
可以從存在於矩陣列表中的矩陣中提取元素。在R中使用'['方括號作爲lapply的函數R
E.g.我有一個3(2×2)矩陣的列表,我想從這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
的反引號是必要的只是防止解釋解析器(例如告訴它這是一個函數名不啓動解釋[
過早)。
作爲一個函數,它遵循與其他所有內容相同的面向對象規則(在本例中爲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
+
,=
等,以及其他運營商的所有工作這種方式爲好。
很好的解釋 - 舉例說明'其他操作符','/'(1,2)'和'1/2'和'do.call(「/」,列表(1,2))'全部給出相同的結果。 – thelatemail
關於帶星號的函數,請參見[如何查看函數的源代碼?](http://stackoverflow.com/a/19226817/1191259) – Frank
@thelatemail在基礎中,有'Reduce('/',list (1,2))','Map('/',1,2)'和所有以函數作爲參數的''apply',也許更多(?)... – Frank
方括號實際上是一個函數,其第一個參數是被子集的對象。後續參數是該子集的索引。
# 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!
現在,看看在參數lapply
:在這些點代表
args(lapply)
# function (X, FUN, ...)
一切大幹快上的功能FUN
作爲參數傳遞。
因此,當FUN="["
,"["
的第一個參數是列表的當前元素(被迭代),即被子集的對象。雖然後面的參數是"["
的索引
相關:http://stackoverflow.com/questions/10449366/levels-what-sorcery-is-this –
正如其他人指出的,'['絕對是一個函數。還有一些賦值功能(例如:'[<-'),當您在'<-'上使用多種變體時(如該鏈接中的@AriB.Friedman筆記)。例如,嘗試類似這兩個命令:'x < - 1:5; 「[< - 」(x,1,10);' – thelatemail
** R中的所有**都是一個對象,如果它*有*,那麼對象的類型就是函數。 – Gregor