2015-09-26 20 views
0

我試圖更好地理解索引/子集的行爲。使用數字在R中設置矢量

考慮數字矢量x

x <- c(1.0, 2.0) 

我可以在自己的價值觀得到:

x[1L] # the first element of a 1-indexed vector 
#> [1] 1 
x[2L] # the second element of a 1-indexed vector 
#> [1] 2 
x[3L] # the third element, which is not defined/ does not exists, so returns `NA`; ok. 
#> [1] NA 

但我通過這些回報很困惑:

x[1.1] 
#> [1] 1 
x[2.7] 
#> [1] 2 
x[3.1] 
#> [1] NA 

而且似乎這不像我所期望的那樣工作:

x[2.6] <- 3.0 
x 
#> [1] 1 3 

有人能幫我理解這是爲什麼嗎?

+3

該索引被製成一個整數。因此,索引變成'as'integer(2.7)'這是'2' –

+0

有趣。你知道爲什麼決定發佈指數嗎?如果輸入非整數數字索引,則返回錯誤似乎是健康的。 – CarlAH

+0

我真的不知道他們爲什麼這樣寫,而且我也不知道'as.integer()'是否被實現,因爲'['是一個原始函數,所以它直接到C代碼。我所知道的是,它就是這樣運作的,它就是這樣。 ;) –

回答

0

好了,所以核心問題是在我不知道沒有:

?`[` 

其作爲@BondedDust指出的告訴你:

指數指定元素提取或更換。索引是數字或字符向量或空(缺少)或NULL。數字值被as.integer強制轉換爲整數(因此截斷爲零)。字符向量將與對象的名稱(或矩陣/數組,dimnames)匹配:請參閱下面的'字符索引'以獲取更多詳細信息。

所以它只是這樣定義行爲。