对于R语言的数据框结构的数据而言,如果我们只提取一列的话,我们可以通过取子集的方式,这样取的子集本身也是一个向量

library(survival)
data("pbc")
is.vector(pbc[1])
## [1] FALSE
is.vector(pbc$id)
## [1] TRUE

但是如果我们我们只去一行的话,那索引的方式去到的子集返回的还是一个数据框。

is.vector(pbc[1,])
## [1] FALSE
is.data.frame(pbc[1,])
## [1] TRUE

那怎么才能把一行转换为向量呢?之前一直都是想着,那既然行不行。那我就转换成列来取呗。所以就用了下面的操作

example <- t(pbc)[,1]
is.vector(example)
## [1] TRUE

这个方式,在数据量很小的时候使用是可以的。但是如果数据集很大。整个转置的过程就是一个耗时的过程。而如果我们使用

example <- t(pbc[1,])[,1]
is.vector(example)
## [1] TRUE

又十分的繁琐。要解决这个问题,其实要明白。数据框其实是一种可以算作一种特殊类型list。别的list因为每个分类下面可能包括不同的长度或者不同的数据类型。数据框只是一个长度相同的同时又是向量的list。而且数据框是以作为list的分类的。所以其实我们取一列就相当于取了一个list下的整个向量。反而取一行相当于在list的每个分类下各取了一个。因此其实我们使用unlist就可以解决问题

example <- unlist(pbc[1,])
is.vector(example)
## [1] TRUE

这样的取法是的向量包括列名。如果我们也不想要列名。那就可以

example
##         id       time     status        trt        age        sex 
##    1.00000  400.00000    2.00000    1.00000   58.76523    2.00000 
##    ascites     hepato    spiders      edema       bili       chol 
##    1.00000    1.00000    1.00000    1.00000   14.50000  261.00000 
##    albumin     copper   alk.phos        ast       trig   platelet 
##    2.60000  156.00000 1718.00000  137.95000  172.00000  190.00000 
##    protime      stage 
##   12.20000    4.00000
unlist(pbc[1,], use.names = F)
##  [1]    1.00000  400.00000    2.00000    1.00000   58.76523    2.00000
##  [7]    1.00000    1.00000    1.00000    1.00000   14.50000  261.00000
## [13]    2.60000  156.00000 1718.00000  137.95000  172.00000  190.00000
## [19]   12.20000    4.00000

这样转换同时也需要注意的是,unlist会把factor转换为数字。。。