r语言如何读取matlab数据类型,[转载]R语言数据类型解析[转]
尋求幫助,使用 help(solve),?solve 和 help(“solve”)是一樣的,如果需要搜索可以用
help.search(solve) 或者 ??solve。另外使用 help.start() 可以打開網頁版的幫助,這個功能倒是和
Matlab 的 doc 有幾分相似。
使用 source() 和 sink() 命令可以將 R 的輸入輸出重新定向,比如從一個文件中讀入命令就是 source(
“my-file.R”),而將輸出導入到文件則是 sink( “output.result” )。
對于一個 workspace 里面的數據,可以用 objects() 或者 ls() 列出,rm(x, y, z)
刪掉某些變量,值得注意的是這里直接寫變量名,都沒有引號,這是和 R 語言的規范有關系的(與 lisp 挺像的)。結束一個
session 的時候可以將 workspace 的內容存儲在工作目錄下,作為 .RData 文件,下次在該目錄使用 R 打開新的 R
對話時會自動的讀入。存儲 workspace 可以用 save.image(),或者更加細致的 save() 命令。
R 的賦值使用 ->、
content ) 形式。主要的數據類形式 vector、objects、factor、array、matrix、list 和
data frame。vector 這個和一般的 Matlab 數組類似,但是和 Matlab
的運算不同的是,它不需要參與運算的兩者長度一樣,不同長度的元素會按照最長的那一個重復。
常用生成 vector 的函數有 seq() 類似 matlab 的 linspace 或者 1:2:10
這種類型的等差數列,rep() 是類似 repmat 的作用,但是可以將整體重復或者將每個元素重復。和 Matlab 類似,R 也擁有
logical vector(支持 !、& 等邏輯操作),vector 里面的 NA 表示
missing value。判斷 NA 使用 is.na(),這個與 Matlab 的 is 系列函數類似。注意 is.na(x) 與
x == NA 的結果是不同的。另外有一些計算會產生 NaN,這和 NA 有一定的不同,但是 is.na() 對兩者不加區分,而
is.nan() 可以區分兩者。
R 的字符串 vector 和 matlab 類似,都是用現成的結構(R 使用 vector)存放的,R
支持單引號或者雙引號,也支持 C 語言中的轉意字符,如 n、t 等。
如果需要取一個 vector 的一部分出來,與 Matlab 類似可以用 logical vector,或者一個整數
vector,但是和 matlab 不同的是,索引使用 [],而不是 (),另外允許對返回值使用索引,比如 (1:10)[seq(1,
10, by=2)] 是允許的。另外如果 index 出現負數,表示除掉這些絕對值后的 index 剩下的 index。與
Matlab 類似,索引的 vector 可以作為左值。不同的是 R 的 vector 有 names
屬性,這意味著每個元素還可以通過字符串來進行索引(需要用 names(myvector)
賦值)。
R 里面的原子結構(atomic structure)是 logical、numeric、complex、character 和
raw,其他的 objects 都是這些 atom 的組合,我們也把原子的種類稱為 mode,比如 vector 是相同的 atom
組成的;而 list 就是為了形成各種結構的嵌套結構,所以每個元素可以是不同的 mode。我們可以用 mode(obj)
獲得一個對象的 mode,另外一個屬性是 length()。一般來說,我們可以通過 attributes()
獲得一個對象的屬性。結構的互相轉換,常使用 as.*() 函數,如 as.character()、as.integer()。
值得注意的是,訪問某個對象的屬性和修改該屬性都使用同一個函數,只是后者加上賦值,如 length(x)
objective, “property”) 獲得某個對象的屬性。每個對象有自己的 class,這可以用 class() 獲得,使用
unclass() 可以暫時消除起 class 信息。
所謂的 factor 就是所謂的 categorical variable,這分為 ordered 以及
unordered,如創建一個 string vector,通過 factor 構造出一個 unordered
factor,我們可以用 levels 獲得其標簽,如果我們用 class 查看會發現這是 factor,但是用 mode 看卻是
numeric。一個 factor 和一個 vector 的組合常被稱為 ragged
array,因為每個子類的長度不一定相同。我們常用 taaply( vector, factor, fun)
來對每個子類的數據進行計算。ordered factor 使用 ordered() 創建,兩者大致看來只是后者會依照 factor
排序,但是在 regression 里面兩者是區別對待的。
matrix 和 array 都是含有 dim 屬性的 vector,因此建立一個 vector,然后對其 dim
屬性賦值就變成 matrix 或者 array,matrix 是兩維的,更高維的就是 array,如
x
c(3,?8) 這產生的是 3×8 的 matrix,我們可以通過 class 看見,其 mode
仍然是 numeric。對 array 的索引和 Matlab 一樣,可以用 [ , ] 的形式,只是用空參數表示全部的(Matlab
是 :),另外 R 支持用 array 來作索引,如 3×4 的 matrix 可以用 nx2 的 matrix 取其中 n
個元素,每行是一個索引位置。可見 R 里面的 matrix 或者 array 的數據儲存并沒有改變,只是通過 dim
屬性給它添加了額外的索引方式。可以用 array() 和 matrix() 更方便的創建我們需要的矩陣、數組。如我們需要產生一個 N
個樣本 c 類的 assignment matrix,A
; 其中 cbind() 將兩個 matrix 依照列拼接,類似的還有 rbind(這分別相當于 Matlab 里面的 [ ; ] 與
[ , ])。當 vector 和 marix/array 混合在一起進行計算的時候,短的 vector 補長,必須擁有相同的
dim。將 matrix/array 轉換成為 vector 只需要 as.vector() 或者直接用 c() 即可。
常用的矩陣操作有元素對元素的加法、減法和乘法,直接使用 + – * 即可,另外有矩陣乘法用 %*%(vector
作矩陣乘法的時候會產生較小的矩陣,比如兩個 vector 相乘,產生的是標量而不是一個矩陣),外積(其實是 Kronecker
乘積)%o% 或者 outer()。不過 outer() 是更廣義的函數,除了可以做 %o%
運算,還可以將任意函數作用在類似的結構上。矩陣的轉置使用 aperm,這個操作實際上是把 array 的維數互換,因此 aperm(
X, c(2 1)) 等價于轉置了,更簡潔的是使用 t(X)。crossprod(X, y) 等價于 X’y,而diag() 和
Matlab 中函數類似。求解線性系統可以用 solve(A, b),如果寫 solve(A) 返回的是 A 的逆。使用
eigen() 可以求出特征值,這返回的的一個是 $value,一個是 $vectors,這種結構將在后面介紹。奇異值使用
svd(),它返回 $d $u $v 三個部分。lsfit() 可以計算最小二乘擬合。qr() 計算對應的 QR 分解。
為了統計一些頻率,比如 contingency table,都會使用 table() 函數,比如對 factor
的統計,如果是實值的可以用 cut() 函數將其值離散化為 ordered factor,如果有多個 因素,則對應的
contingency table 也是用 table( factor1, factor2 ) 獲得的。
前面我們看見了 $ 這種寫法,這就是 list,這一般使用 list() 創建,list 的元素可以有用來索引的
key,這可以用 listvar$key 獲得其內容,也可以使用 listvar[[ "key" ]]獲得,通過 [[i]]
這樣可以遍歷所有 key,注意 [i] 將和 Matlab 對 cell array 使用 (i) 類似,獲得的不是第 i
個位置的內容,而是對應位置上的 list。對 list 使用 attributes() 將會返回 names,這是這個 list
所有的 key 組成的 key,如果沒有 key,對應的是一個空字符串。這也是 R 默認返回多個返回值的方法。
所謂的 data.frame 也是一種 list,但是要求每個子 list 里面都是長度一樣的 vector,其實
data.frame 是處理數據最佳的方式,相當于每一列都是一個特征的數據矩陣。通常我們可以用 data.frame()
函數產生,這其實和 list() 函數完全一樣。為了處理某個 data.frame 方便,可以用 attach()/detach()
進入到某個 data.frame 的 scope 里,這時就可以免去前面 data$ 的修飾符了,對一般的 list
也可以使用類似的方式。我們要對 R 尋找變量的方式熟悉的話就知道,使用 search() 返回的是搜索變量和函數的 scope,一般
R 的基本函數在 package:base 里面,全局變量在 .GlobalEnv 里面,attach() 的 list
也會添加到這個 vector 里面。最常見讀入外部數據的函數是 read.table(),這也是創建 data.frame
的最方便的方式,另外還有一個 scan()。R 自己也帶了很多數據供做實驗,可以用 data( dataset )
讀入,還可以用某個特定的 package 讀入數據。對這種數據一般都可以在一個 spreadsheet 里面編輯,這只需要
edit() 那個 data.frame 就可以了。
總結
以上是生活随笔為你收集整理的r语言如何读取matlab数据类型,[转载]R语言数据类型解析[转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部门信息管理系统
- 下一篇: css的属性是变量是怎么表达,CSS自定