《R語言程式設計藝術》 3 6 避免意外降維

2021-09-23 09:35:10 字數 967 閱讀 8717

在統計學領域,「降維」(dimension reduction)是有益的,也存在很多降維的統計學方法。假設我們需要處理10個變數,如果能把變數個數降到3,卻還能保留資料的主要資訊,何樂而不為呢?

但是在r裡,降維指的完全是另外一件事情,而且通常要避免。比如我們有乙個4行的矩陣,提取其中的一行:

這個看似沒有問題,但是注意看r的顯示格式,是向量的格式,而非矩陣的格式。也就是說,r是乙個長度為2的向量,而不是乙個1乘2的矩陣。我們可以用幾種方法來驗證它的確已經變成向量了:

可以看到z是有行數與列數的,但是r沒有。類似的,str()顯示z的行索引區間為1:4,列索引區間為1:2。而r的索引區間是1:2。毫無疑問,r是乙個向量而非矩陣。

把r變成向量看似沒有問題,但在某些涉及大量矩陣操作的程式中會引起錯誤。也許程式在大部分情況下都能正常執行,但在少數情況下就是通不過。例如某個程式從乙個給定的矩陣裡提取乙個子矩陣,然後對這個子矩陣進行一些矩陣操作。如果這個子矩陣只有一行,r會把它當作向量處理,後面的矩陣操作無法執行在這個向量上,程式會出錯。

幸好r裡有辦法禁止矩陣自動減少維度:使用drop引數。仍以上述矩陣z為例:

現在r是乙個1乘以2的矩陣而非由兩元素組成的向量。

因此,需要經常性地在矩陣操作**裡使用引數drop=false。

為什麼說drop是乙個引數呢?因為 [ 事實上也是乙個函式,跟+等操作符一樣。請看以下**:

R語言程式設計藝術 11 14 15

11.字串操作 a c equator north pole south pole grep pole a 在字串a中搜尋pole nchar a 返回字串a的長度 r語言中的字串末尾沒有空字元null 對於非字元形式就要用到hadley wickham寫的stringr包 paste north ...

R語言程式設計藝術(5)R語言程式設計高階

本文對應 r語言程式設計藝術 第14章 效能提公升 速度和記憶體 第15章 r與其他語言的介面 第16章 r語言平行計算 效能提公升 速度和記憶體 要使r 執行速度更快,有以下建議 通過向量化的方式優化 使用位元組碼編譯等 將 中最消耗cpu的核心部分用編譯型語言編寫,如c或c 將 用某種並行的方式...

R語言資料降維 主成分分析

這裡我們使用的是鳶尾花資料集 iris data iris head iris sepal.length sepal.width petal.length petal.width species 15.1 3.51.4 0.2setosa 24.9 3.01.4 0.2setosa 34.7 3.2...