2012-06-04 116 views
1

可能重複:
In R, what is the difference between the [] and [[]] notations for accessing the elements of a list?R中數據幀的[1],[1,],[,1],[[1]]有什麼區別?

我感到困惑與[1],[1,],[1],[[1]]對於數據幀類型的不同。

據我所知,[1,]會取matrix的第一行,[,1]會取第一列。 [[1]]將獲取list的第一個元素。

但我檢查的data.frame的文件,該文件說

數據幀的行數相同的變量與 唯一的行名

然後,我在某些類型的列表代碼來測試使用情況。

>L3 <- LETTERS[1:3] 
>(d <- data.frame(cbind(x=1, y=1:10), fac=sample(L3, 10, replace=TRUE))) 
    x y fac 
1 1 1 C 
2 1 2 B 
3 1 3 C 
4 1 4 C 
5 1 5 A 
6 1 6 B 
7 1 7 C 
8 1 8 A 
9 1 9 A 
10 1 10 A 
> d[1] 
    x 
1 1 
2 1 
3 1 
4 1 
5 1 
6 1 
7 1 
8 1 
9 1 
10 1 
>d[1,] 
    x y fac 
1 1 1 C 
>d[,1] 
[1] 1 1 1 1 1 1 1 1 1 1 
>d[[1]] 
[1] 1 1 1 1 1 1 1 1 1 1 

什麼讓我感到困惑的是:[1]和[,1] matrix時才使用。 [[1]]僅在list中使用,[1]在vector中使用,但爲什麼它們都可用於數據幀?

有人可以解釋這些用法的區別嗎?

+0

實際上[[]]也可以與數據幀一起使用 – Alex

回答

4

在R中,運算符不用於一種數據類型只有。無論你喜歡什麼樣的數據類型(例如S3/S4類),操作符都可以被重載。

實際上,data.frames就是這種情況。

  • 爲data.frames是列表中,[i][[i]](和$)顯示列表的行爲。

  • 行,colum索引確實對錶有直觀的意義,data.frames看起來像表一樣。這可能就是爲什麼data.frame [i,j]的方法被定義的原因。

你甚至可以看一下定義,他們在S3系統進行編碼(所以methodname.class):

> `[.data.frame` 

> `[[.data.frame` 

(反引號引用的函數名,否則R會嘗試使用操作符並最終出現語法錯誤)

相關問題