本章會從 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"
。