本章會從 R 語言中最基本的資料型別開始介紹,在此之後就可以開始 R 語言實踐了。對社交網路分析而言,我們在處理字串上所花費的時間要遠遠大於處理數字的時間,因此本章還會介紹常用的字串處理操作。
變數
R 語言中基本的資料型別包括:
- 整型(integer):整數,如
100
; - 浮點型(double):小數,如
3.14
; - 字串型(character):R 語言中的字串可以使用
"
或者'
定義,如"abc"
,'abc'
; - 邏輯型(logical):其他程式語言中常稱為布林型,在 R 語言中使用嚴格區分大小寫的
TRUE
和FALSE
表示,或者使用縮寫T
和F
。
? 提示
R 語言中還存在數值型 numeric
,可以看作整型和浮點型的並集。
變數就是對資料型別的引用,比如有一個整型值 100,想在程式中使用它並用 a 來表示,將 100 賦值給 a 後(a <- 100
),a 就稱之為變數。R 語言對變數的定義並不像強型別的語言一樣需要在定義變數時宣告變數的資料型別。當進行賦值操作時,就定義了一個新的變數。下面這段程式就是宣告瞭一個變數 a,並且將 100 賦值給了變數 a,這三行程式碼的操作是等價的:
a <- 100
a = 100
100 -> a
在 R 語言中標準的賦值符號為 <-
,這其中包含兩個字元 <
和 -
。當然也可以使用 =
進行代替。從上面的程式碼也可以觀察到,賦值符號 <-
是有方向性的,指向被賦值的物件。
變數的名稱不是隨意的,一個有效的變數名由字母開頭,後面跟上任意數量的字母,數字以及下劃線。下面是一些合法的變數名:a
、a1
、a_b
、a.b
。下面是一些非法的變數名稱:1
、1a
、_a
。當然,也不要使用關鍵字作為變數名,關鍵字是用於描述 R 語言的語法的。
? 提示
下面給出一些特殊的運算子:
運算子 | 描述 | 示例 | 輸出 |
---|---|---|---|
^ | 乘方 | 2^3 | 8 |
%% | 求餘 | 3 %% 2 | 1 |
%/% | 整除 | 5 %/% 2 | 2 |
字串
字串的建立
R 語言中的字串既可以使用雙引號 "
定義,也可以使用單引號 '
定義。但是為什麼要使用兩種引號定義字串?
> '這是包含"雙引號"的字串'
[1] "這是包含\"雙引號\"的字串"
> "這是包含'單引號'的字串"
[1] "這是包含'單引號'的字串"
這樣做的好處是可以在不轉義引號的情況下,建立本身就包含引號的字串。可以在雙引號 "
定義的字串中使用單引號 '
,也可以在單引號 '
定義的字串中使用雙引號 "
。
使用 as.character()
可以將其他的資料型別轉換成字串:
> as.character(3.14)
[1] "3.14"
> as.character(T)
[1] "TRUE"
特殊字元的轉義
轉義是指輸出具有特殊意義的字元,比如想要在雙引號定義的字串中使用雙引號,或者在字串中使用換行操作。和大多數語言一樣,R 語言中使用反斜槓 \
進行轉義操作,常見的轉義字元有換行符 \n
,引號 \" \'
,以及對反斜槓本身進行轉義 \\
。
> writeLines("Use \"double quotation\" in a string")
Use "double quotation" in a string
> writeLines("Use line breaks\nin a string")
Use line breaks
in a string
字串的其他常用操作
獲取字串的長度 nchar()
:
> nchar("Social Network")
[1] 14
字串的拼接 paste()
,sep
引數為連線的字元:
> paste("Social", "Network", sep = "-")
[1] "Social-Network"
字串的分割 strsplit()
:
> strsplit("Social-Network", "-")
[[1]]
[1] "Social" "Network"
字串的擷取 substr()
,要注意的是,和大多數語言不同,R 語言的索引從 1 開始:
> substr("Social Network", 1, 6)
[1] "Social"
字串的格式化輸出 sprintf()
,在 R 語言中也採用類似 C 語言的風格對變數進行格式化:
%s
:字串%f
:浮點型%d
:整數%e
:科學計數法
> sprintf("The degree of the node is %d\n", 4)
[1] "The degree of the node is 4\n"
當需要輸出轉義字串時,可以在外層套用 cat()
:
> cat(sprintf("The degree of the node is %d\n", 4))
The degree of the node is 4
✏️ 練習
1. 第一章留下的問題 "a"+"b"
會輸出 ab
嗎,如何將"a"
和 "b"
拼接成 "ab"
;
2. 擷取 "Social Network"
中的 "Network"
。