買的書里面實例講的不清不楚,所以看幫助文檔了
用法:unlist(x, recursive = TRUE, use.names = TRUE)
幫助文檔講x可以是向量或者列表,如果是向量,則原樣返回,嘗試下,確實如此,向量並不是典型的用法。
> x<-c(1,2,3)
> unlist(x)
[1] 1 2 3
> names(x)<-c("first","second","third")
> x
first second third
1 2 3
> unlist(x)
first second third
1 2 3
> unlist(x,use.names=F)
first second third
1 2 3
> unlist(x,recursive=FALSE)
first second third
1 2 3
如果使用列表,一般情況下,如果recursive = FALSE,則unlist只會作用於列表的第一層,向量(矩陣看成有維度的向量,應該相同處理)元素會取出向量的單個值作為unlist后的項,列表元素(數據框作為特殊列表?)則取出列表元素的組成作為項。use.names = FALSE,則是否使用元素名稱,命名方法為元素名稱(.下一層元素名稱)+1,2,3組成,從列到行讀取數據,無名稱則對應向量名稱為空。數字會適應統一類型可能轉變為字符。
如果元素是因子,則返回的值為因子對應的1,2,3,4水平。names, formulas and calls這些列表元素返回的很可能還是列表,另論。
> y<-list(name=c("peter","john","mike"),ages=c(24,35,68),c(88,99),am=list(try=c(1,2),uk=matrix(1:6,2,3))
+ )
> y
$name
[1] "peter" "john" "mike"
$ages
[1] 24 35 68
[[3]]
[1] 88 99
$am
$am$try
[1] 1 2
$am$uk
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> unlist(y)
name1 name2 name3 ages1 ages2 ages3 am.try1 am.try2 am.uk1 am.uk2 am.uk3 am.uk4 am.uk5 am.uk6
"peter" "john" "mike" "24" "35" "68" "88" "99" "1" "2" "1" "2" "3" "4" "5" "6"
> unlist(y,use.names=FALSE)
[1] "peter" "john" "mike" "24" "35" "68" "88" "99" "1" "2" "1" "2" "3" "4" "5" "6"
> unlist(y,recursive=FALSE)
$name1
[1] "peter"
$name2
[1] "john"
$name3
[1] "mike"
$ages1
[1] 24
$ages2
[1] 35
$ages3
[1] 68
[[7]]
[1] 88
[[8]]
[1] 99
$am.try
[1] 1 2
$am.uk
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> unlist(y,recursive=FALSE,use.names=FALSE)
[[1]]
[1] "peter"
[[2]]
[1] "john"
[[3]]
[1] "mike"
[[4]]
[1] 24
[[5]]
[1] 35
[[6]]
[1] 68
[[7]]
[1] 88
[[8]]
[1] 99
[[9]]
[1] 1 2
[[10]]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> y$fc<-factor(c("a","b","a","c","b"))
> y$fc2<-factor(c("jj","kk","jj"))
> y
$name
[1] "peter" "john" "mike"
$ages
[1] 24 35 68
[[3]]
[1] 88 99
$am
$am$try
[1] 1 2
$am$uk
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
$fc
[1] a b a c b
Levels: a b c
$fc2
[1] jj kk jj
Levels: jj kk
> unlist(y)
name1 name2 name3 ages1 ages2 ages3 am.try1 am.try2 am.uk1 am.uk2 am.uk3 am.uk4 am.uk5 am.uk6 fc1
"peter" "john" "mike" "24" "35" "68" "88" "99" "1" "2" "1" "2" "3" "4" "5" "6" "1"
fc2 fc3 fc4 fc5 fc21 fc22 fc23
"2" "1" "3" "2" "1" "2" "1"
> z<-list(add=factor(c("a","d","a")),add1=factor(c("a","b","c","d","a")),FB=list(bd=c("33","66"),c(8,9)))
> unlist(z)
add1 add2 add3 add11 add12 add13 add14 add15 FB.bd1 FB.bd2 FB3 FB4
"1" "2" "1" "1" "2" "3" "4" "1" "33" "66" "8" "9"