向量:原子向量(邏輯型授翻、整型积暖、雙精度型藤为、字符型),列表
1. 原子向量
1.1 邏輯型
比較運算符構(gòu)建邏輯向量
> c(1,2,3,4,5) >= 3
[1] FALSE FALSE TRUE TRUE TRUE
c()手動構(gòu)建
> c(TRUE, FALSE, FALSE)
[1] TRUE FALSE FALSE
1.2 數(shù)值型
包括整型和雙精度型夺刑,R默認(rèn)是雙精度型的缅疟,如果想創(chuàng)建整型數(shù)值,要在后面加一個L遍愿。
注意
- 雙精度型是近似值存淫,表示浮點數(shù)。不用==判斷相等沼填,用dplyr::near()桅咆。
- 整型有一個特殊值,NA坞笙;雙精度型多三個岩饼,NaN、Inf薛夜、-Inf籍茧。輔助函數(shù)is.finite()、is.infinite()梯澜、is.na()寞冯、is.nan()可以判斷這些特殊值。
1.3 字符型
在R中腊徙,唯一的字符串只被保存一次简十,別的拷貝只是生成指向該字符串的指針。
2. 使用原子向量
2.1 強制轉(zhuǎn)換
顯示強制轉(zhuǎn)換
as.logical(), as.integer(), as.double(), as.character()
隱示強制轉(zhuǎn)換
需結(jié)合上下文環(huán)境撬腾。常見的比如:數(shù)值環(huán)境下的邏輯向量
原子向量不能包含不同類型的元素螟蝙,會轉(zhuǎn)換為最復(fù)雜的元素類型,列表才可以民傻。
> typeof(c(TRUE,1L,1.0,"1"))
[1] "character"
> typeof(c(TRUE,1L,1.0))
[1] "double"
> typeof(c(TRUE,1L))
[1] "integer"
> typeof(c(TRUE))
[1] "logical"
2.2檢驗函數(shù)
2.3向量循環(huán)
在R中會將較短的向量(這里包括"標(biāo)量")循環(huán)/重復(fù)到與較長的向量相同的長度胰默。
> 1:6+1
[1] 2 3 4 5 6 7
> 1:6+1:2
[1] 2 4 4 6 6 8
> 1:6+1:4 #不成整數(shù)倍關(guān)系時報警告
[1] 2 4 6 8 6 8
Warning message:
In 1:6 + 1:4 :
longer object length is not a multiple of shorter object length
但tidyverse()中更嚴(yán)格一些,只會對標(biāo)量進(jìn)行循環(huán)漓踢。短向量要用rep()手動重復(fù)牵署。
2.4向量命名
> c(x=1,y=2)
x y
1 2
> vec <- c(1,2)
> purrr::set_names(vec,c("x","y"))
x y
1 2
2.5向量取子集
一般形式x[......]
使用包含整數(shù)的數(shù)值向量
> x <- c(11,22,33,44,55)
> x[c(1,2,4,4)]
[1] 11 22 44 44
使用邏輯向量取子集
> x[x >= 30]
[1] 33 44 55
使用字符向量取子集,針對命名向量
> x <- set_names(x,c("a","b","c","d","e"))
> x[c("a","b","a")]
a b a
11 22 11
3.遞歸向量(列表)
> xlist <- list(a = 1:3, b = "a strings", c = list(1,2))
#生成小的列表
> xlist[1:2]
$a
[1] 1 2 3
$b
[1] "a strings"
> xlist["c"]
$c
$c[[1]]
[1] 1
$c[[2]]
[1] 2
#生成元素本身
> xlist[[1]]
[1] 1 2 3
> xlist[["a"]]
[1] 1 2 3
#$提取列表命令元素喧半,生成元素本身
> xlist$a
[1] 1 2 3
4.擴展向量
因子奴迅、日期、日期時間挺据、tibble
tibble或是數(shù)據(jù)框可以看成是擴展的列表
> df <- data.frame(x=1:5,y=6:10)
> typeof(df)
[1] "list" #理解為包含兩個元素的列表取具,第一個元素是向量1:5脖隶,第二個元素是6:10,豎著看
> attributes(df) #查看特性
$names #列名
[1] "x" "y"
$class #類
[1] "data.frame"
$row.names #行名
[1] 1 2 3 4 5
> df[[1]] #生成元素本身
[1] 1 2 3 4 5
> df[1] #生成小的數(shù)據(jù)框
x
1 1
2 2
3 3
4 4
5 5