在提取數(shù)據(jù)框或者maxtrix數(shù)據(jù)的時(shí)候我們喜歡使用[,]玄捕, 那么我們應(yīng)該養(yǎng)成習(xí)慣:始終使用drop=FALSE參數(shù)。
R中棚放,單列數(shù)據(jù)框經(jīng)常會(huì)被轉(zhuǎn)換成因子:
d <- data.frame(x = seq_len(3))
print(d)
#> x
#> 1 1
#> 2 2
#> 3 3
d[order(-d$x), ]
#> [1] 3 2 1
# 注意枚粘,我們得到的是因子!
上面例子中飘蚯,我們的本意是對(duì)x進(jìn)行排序馍迄,結(jié)果得到了因子福也,d[,]
也會(huì)得到同樣結(jié)果
而加上drop=FALSE
就能避免這種 情況
d[order(-d$x), , drop = FALSE]
#> x
#> 3 3
#> 2 2
#> 1 1
# 得到的依然是數(shù)據(jù)框
為了安全起見(jiàn)暴凑,在對(duì)數(shù)據(jù)框取數(shù)據(jù)時(shí)鼓勵(lì)以下類(lèi)似list的做法(畢竟數(shù)據(jù)框可以看作是column的list)
d[["x"]]
#> [1] 1 2 3
d$x
#> [1] 1 2 3
d[[1]]
#> [1] 1 2 3
結(jié)論
不管對(duì)象是不是單列赘来,始終加上drop=FALSE
參數(shù),write mtcars[, c("mpg", "cyl"), drop = FALSE]
instead of mtcars[, c("mpg", "cyl")]