R語言快速入門

oceanzou發表於2018-09-18

START

為什麼要使用R?

多數商業統計軟體價格不菲,投入成千上萬美元都是可能的。而R是免費的!

R擁有頂尖水準的製圖功能。如果希望複雜資料視覺化,那麼R擁有最全面且最強大的一 系列可用功能。

R是一個可進行互動式資料分析和探索的強大平臺。

R是一個無與倫比的平臺,在其上可使用一種簡單而直接的方式編寫新的統計方法。它易 於擴充套件,併為快速程式設計實現新方法提供了一套十分自然的語言。

R可執行於多種平臺之上,包括Windows、UNIX和Mac OS X。這基本上意味著它可以運 行於你所能擁有的任何計算機上。

下面展示R製圖功能的一個示例

R語言快速入門

R的獲取與安裝

R可以在CRAN(Comprehensive R Archive Network)cran.r-project.org 上免費下載。Linux、 Mac OS X和Windows都有相應編譯好的二進位制版本。根據你所選擇平臺的安裝說明進行安裝即 可。稍

資料結構

向量

向量適用於儲存數值型、字元型或邏輯型資料的一維陣列

a <- c(1,2,3,4)
b <- c("one","two","three")
c <- c(TRUE,FALSE)
cat(a,b,c)
複製程式碼

輸出結果為

1 2 3 4 one two three TRUE FALSE
複製程式碼

這裡,a是數值型向量,b是字元型向量,而c是邏輯型向量。①注意,單個向量中的資料必須擁有相同的型別或模式(數值型、字元型或邏輯型)。同一向量中無法混雜不同模式的資料。

矩陣

矩陣是一個二維陣列,只是每個元素都擁有相同的模式(數值型、字元型或邏輯性),可通過函式matrix建立矩陣

檢視幫助

> help("matrix")
複製程式碼

得到關於 matrixR Documentation ,看下說明

matrix {base}	R Documentation
Matrices

Description

matrix creates a matrix from the given set of values.

as.matrix attempts to turn its argument into a matrix.

is.matrix tests if its argument is a (strict) matrix.

Usage

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,
       dimnames = NULL)

as.matrix(x, ...)
## S3 method for class 'data.frame'
as.matrix(x, rownames.force = NA, ...)

is.matrix(x)
Arguments

data	
an optional data vector (including a list or expression vector). Non-atomic classed R objects are coerced by as.vector and all attributes discarded.
nrow	
the desired number of rows.
ncol	
the desired number of columns.
byrow	
logical. If FALSE (the default) the matrix is filled by columns, otherwise the matrix is filled by rows.
dimnames	
A dimnames attribute for the matrix: NULL or a list of length 2 giving the row and column names respectively. An empty list is treated as NULL, and a list of length one as row names. The list can be named, and the list names will be used as names for the dimensions.
x	
an R object.
...	
additional arguments to be passed to or from methods.
rownames.force	
logical indicating if the resulting matrix should have character (rather than NULL) rownames. The default, NA, uses NULL rownames if the data frame has ‘automatic’ row.names or for a zero-row data frame.
Details

If one of nrow or ncol is not given, an attempt is made to infer it from the length of data and the other parameter. If neither is given, a one-column matrix is returned.

If there are too few elements in data to fill the matrix, then the elements in data are recycled. If data has length zero, NA of an appropriate type is used for atomic vectors (0 for raw vectors) and NULL for lists.

is.matrix returns TRUE if x is a vector and has a "dim" attribute of length 2 and FALSE otherwise. Note that a data.frame is not a matrix by this test. The function is generic: you can write methods to handle specific classes of objects, see InternalMethods.

as.matrix is a generic function. The method for data frames will return a character matrix if there is only atomic columns and any non-(numeric/logical/complex) column, applying as.vector to factors and format to other non-character columns. Otherwise, the usual coercion hierarchy (logical < integer < double < complex) will be used, e.g., all-logical data frames will be coerced to a logical matrix, mixed logical-integer will give a integer matrix, etc.

The default method for as.matrix calls as.vector(x), and hence e.g. coerces factors to character vectors.

When coercing a vector, it produces a one-column matrix, and promotes the names (if any) of the vector to the rownames of the matrix.

is.matrix is a primitive function.

The print method for a matrix gives a rectangular layout with dimnames or indices. For a list matrix, the entries of length not one are printed in the form integer,7 indicating the type and length.

Note

If you just want to convert a vector to a matrix, something like

  dim(x) <- c(nx, ny)
  dimnames(x) <- list(row_names, col_names)
will avoid duplicating x.

References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

See Also

data.matrix, which attempts to convert to a numeric matrix.

A matrix is the special case of a two-dimensional array.

Examples

is.matrix(as.matrix(1:10))
!is.matrix(warpbreaks)  # data.frame, NOT matrix!
warpbreaks[1:10,]
as.matrix(warpbreaks[1:10,])  # using as.matrix.data.frame(.) method

## Example of setting row and column names
mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,
               dimnames = list(c("row1", "row2"),
                               c("C.1", "C.2", "C.3")))
mdat
複製程式碼

使用示例

> mdat <- matrix(c(1,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE,
+                dimnames = list(c("row1", "row2"),
+                                c("C.1", "C.2", "C.3")))
> mdat
     C.1 C.2 C.3
row1   1   2   3
row2  11  12  13
> print(mdat)
     C.1 C.2 C.3
row1   1   2   3
row2  11  12  13

複製程式碼

陣列

資料與矩陣類似,但是維度可以大於2,通過array函式建立

> array(1:3, c(2,4,3))
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    3    2    1
[2,]    2    1    3    2

, , 2

     [,1] [,2] [,3] [,4]
[1,]    3    2    1    3
[2,]    1    3    2    1

, , 3

     [,1] [,2] [,3] [,4]
[1,]    2    1    3    2
[2,]    3    2    1    3
複製程式碼

資料幀

資料幀是表格物件,與矩陣不同,每列可以包含不同的資料型別,通過data.frame函式建立

要學會使用help,這次輸出 help("data.frame") 檢視用例,下面給出一個示例

> data.frame(1, 1:10, sample(LETTERS[1:3], 10, replace = TRUE))
   X1 X1.10 sample.LETTERS.1.3...10..replace...TRUE.
1   1     1                                        C
2   1     2                                        A
3   1     3                                        C
4   1     4                                        A
5   1     5                                        C
6   1     6                                        C
7   1     7                                        A
8   1     8                                        A
9   1     9                                        A
10  1    10                                        B
複製程式碼

因子

因子標籤始終是字元型,無論輸入向量是數值型、字元型還是邏輯性。因子將向量儲存在向量中的元素的不同值作為標籤

因子使用factor()函式建立。nlevels函式給出了級別的計數。

apple_colors <- c('green','green','yellow','red','red','red','green')

factor_apple <- factor(apple_colors)

print(factor_apple)
print(nlevels(factor_apple))
複製程式碼

執行上述程式碼,會產生一下結果

[1] green  green  yellow red    red    red    green 
Levels: green red yellow

[1] 3
複製程式碼

列表

列表是一些物件成分的集合,包括上面的資料結構。

> list(c(2,5,8),52.8,TRUE)
[[1]]
[1] 2 5 8

[[2]]
[1] 52.8

[[3]]
[1] TRUE

複製程式碼

變數

物件的名稱由大小寫字母、數字0-9、點號和下劃線組成,名稱是區分大小寫的,不能以數字開頭 ,以字母開頭,或者點後面不帶數字

變數賦值

變數可以使用向左、向右和等於運算子分配值

<- <<- = 叫作左分配符

-> ->> 叫作右分配符

其它運算子

冒號運算子 :

> 1:10
 [1]  1  2  3  4  5  6  7  8  9 10
複製程式碼

成員運算子 %in%

> v1 <- 8
> 
> t <- 1:10
> 
> print(v1 %in% t)

[1] TRUE
複製程式碼

轉置相乘 %*%

該運算子用於將矩陣與其轉置相乘

> M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
> 
> t = M %*% t(M)
> 
> print(t)

     [,1] [,2]
[1,]   65   82
[2,]   82  117
複製程式碼

除此之外還需要注意的點

語句之間用分號; 或者 換行符 \n 分隔

print()或cat()函式列印變數的值

cat可以將多個變數列印輸出,逗號分隔

變數查詢、新增和刪除

查詢和新增用下標

刪除變數用rm()函式

這裡就不多介紹了

運算子

算術運算子、邏輯運算子、all()和any()、位運算子

算術運算子

加法 +

> x <- -1:9
> x + 1
 [1]  0  1  2  3  4  5  6  7  8  9 10
> x + 1
 [1]  0  1  2  3  4  5  6  7  8  9 10
> x + 2
 [1]  1  2  3  4  5  6  7  8  9 10 11
> x * 2 + 3
 [1]  1  3  5  7  9 11 13 15 17 19 21
複製程式碼

減法 -

> v <- c( 2,5.5,6);
> t <- c(8, 3, 4);
> print(v-t);
[1] -6.0  2.5  2.0
複製程式碼

乘法 *

>  v <- c( 2,5.5,6);
>  t <- c(8, 3, 4);
>  print(v * t);
[1] 16.0 16.5 24.0
複製程式碼

以下運算子就自己多手動實踐啦!不知道的可以多help,比如help("+")都可以的

除法 /

求餘 %%

求模 %/%

求指數冪 ^

邏輯運算子

大於

> v <- c(2,5.5,6,9);
> t <- c(8,2.5,14,9);
> print(v>t);
[1] FALSE  TRUE FALSE FALSE
複製程式碼

這裡就不多介紹了

小於

等於 ==

小於或等於 <=

大於或等於 >=

不等於 !=

~注意~

& | 作用在兩個向量相應元素上進行比較

&& 和 || 只作用在物件的第一個元素上

函式

函式定義

function_name <- function(arg_1, arg_2, ...) {

Function body

}
複製程式碼

函式由不同的元件組成,它們是:

函式名稱 function_name

引數 arg_1, arg_2, ...

函式體 Function body

返回值 return

內建函式

seq() , mean() , max() , sum() , paste()

使用者自定義函式

new.function <- function(a) {

    for(i in 1:a) {

        b <- i^2

        print(b)

}}
複製程式碼

呼叫函式

new.function(10)
複製程式碼

也可以呼叫沒有引數的函式

new.function <- function() {

for(i in 10:20) {

print(i^2)

}}

new.function()
複製程式碼

總結

為什麼要學習R語言?我這裡可能往大資料方向發展,有可能往人工智慧方向發展,也有可能往演算法方向發展。人生有太多的不確定因素,既然自己想著要學那就慢慢來學唄。充滿希望的旅途勝過終點的到達。

相關文章