2016-10-17 27 views
0

我的問題不僅僅是一個編碼問題,而僅僅是好奇心。 R中的一個好處是,索引規則是相當靈活的,因爲我們可以: 指數正整數,範圍,負整數(刪除行/列),與部分列或行名稱指數等使用十進制數字索引:應用程序

如果我瞭解這些可能性的有用性,可以用十進制數字索引的事實使我非常生動:在什麼情況下這可能有用?你有例子嗎?它不應該返回一個錯誤(它在Matlab中例如)?

這似乎執行trunc操作:

mtcars[22, 1:3] 
####     mpg cyl disp 
#### Dodge Challenger 15.5 8 318 
mtcars["Dod", sqrt(c(1, 5, 10))] 
####     mpg cyl disp 
#### Dodge Challenger 15.5 8 318 

(我找不到幫助頁面指數化,也許這一切都在詳細解釋。)

感謝,

+2

'?Extract'「數字值被強制爲as.integer的整數(因此截斷爲零)」。在什麼情況下這可能是有用的?我也想知道。 – zx8754

+1

'?'[''包含您需要知道的所有信息,包括將數字轉換爲整數。 – Miff

+0

噢!這是一個棘手的問題......但仍然有任何關於這種可能性的想法嗎? – agenis

回答

1

該文檔說:

索引是數字或字符向量或空(缺少)或NULL。 數字值被強制爲as.integer的整數(因此 被截斷爲零)。

你問:

在什麼情況下會變成這樣可能有用嗎?你有 的例子嗎?

這是一個非常開放的問題。讓我舉一個例子。假設您有一個矩陣,並且想要提取與方形數字的索引相對應的所有列。記錄^函數返回一個數字向量,即一個double。然而,幸運的是,子集接受這些作爲指標。

typeof((1:10)^2) 
#[1] "double" 

m <- matrix(1:1e3, nrow = 10) 
m[, (1:10)^2] 
#works 

另外請注意,您可以使用m[, 1]而不是m[, 1L]

一般來說,如果您計算索引,這種行爲很方便(但有時會很危險)。當然,它也可能更加嚴格,迫使你明確地強制索引爲整數,但R的創造者決定支持方便。如果您計算索引並且浮點精度可能成爲問題,則需要使用自己的檢查。

+0

謝謝羅蘭,你的例子是一個很好的例子。我明白,這種行爲可能對列矩陣類似於距離度量的大矩陣很有用,就像那樣。也許在圖像處理也... – agenis

+0

@agenis這種行爲可以避免您始終做索引整數。很高興你不必一直輸入「L」。 – Roland

相關問題