R语⾔vector族函数
vector(mode = "logical", length = 0)
as.vector(x, mode = "any") #下⾯没写明默认值,所以Usage这⾥写的就算默认值
is.vector(x, mode = "any")
这三个函数都是同族的
vector produces a vector of the given length and mode.
vector()产⽣⼀个指定模式和长度的向量
as.vector, a generic(泛型), attempts to coerce its argument into a vector of mode mode (the default is to coerce to whichever vector mode is most convenient): if the result is atomic all attributes are removed(结果是原⽣类型,则所有的属性将被移除).
as.vector()转化为⼀个指定模式的向量
is.vector returns TRUE if x is a vector of the specified mode having no attributes other than names. It r
eturns FALSE otherwi.
如果x是⼀种只含有names属性的特定模式类型的向量,则返回T(所以判断的时候要加上类型啊~(mode = "any"))
判断是否为指定模式的向量(默认的模式是“any”)
Arguments
mode
character string naming an atomic mode(应指数值,字符,逻辑等类型下⾯detail有解释) or "list" or "expression" or (except for vector) "any".
length
a non-negative integer specifying the desired length. For a long vector, i.e., length > .Machine$integer.max, it has to be of type "double". Supplying an argument of length other than one is an error.
x
an R object.
Details
The atomic modes are "logical", "integer", "numeric" (synonym(同义词) "double"), "complex", "character" and "raw".
If mode = "any", is.vector may return TRUE for the atomic modes, list and expression. For any mode, it will return FALSE if x has any attributes except names. (This is incompatible with S.) On the other hand, as.vector removes all attributes including names for results of atomic mode (but not tho of mode "list" nor "expression").
如果mode是any,则is.vector将会对原⽣模式,列表,表达式都返回T,只要含有除了names属性外的其他属性就返回F。
as.vector()将去除原⽣类型中的所有属性(包括names),但list和expression不会
望海潮Note that factors are not vectors; is.vector returns FALSE and as.vector converts a factor to a character vector for mode = "any".
因⼦并不是向量,as.vector将其转化为字符向量
Value孕妇发型
For vector, a vector of the given length and mode. Logical vector elements are initialized to FALSE, numeric vector elements to 0, character vector elements to "", raw vector elements to nul bytes and list/expression elements to NULL.
对于给定长度和模式的向量。
逻辑向量⽤F初始化其元素,数值向量⽤0初始化其元素。
字符向量⽤""初始化其元素,list/expression⽤NULL初始化其元素
For is.vector, TRUE or FALSE. is.vector(x, mode = "numeric") can be true for vectors of types "integer" or "double" whereas is.vector(x, mode = "double") can only be true for tho of type "double".
使⽤is.vector的时候,最好指定mode(默认是nay),以便于更准确的判断
趣事
Methods for as.vector()
Writers of methods for as.vector need to take care to follow the conventions of the default method. In particular
Argument mode can be "any", any of the atomic modes, "list", "expression", "symbol", "pairlist" or one of the alias(别名) "double" and "name".
The return value should be of the appropriate mode. For mode = "any" this means an atomic vector or list.
Attributes should be treated appropriately: in particular when the result is an atomic vector there should be no attributes, not even names. is.vector(as.vector(x, m), m) should be true for any mode m, including the default "any".
Note
as.vector and is.vector are quite distinct from the meaning of the formal class "vector" in the methods package, and hence as(x, "vector") and is(x, "vector").
Note that as.vector(x) is not necessarily a null operation if is.vector(x) is true: any names will be removed from an atomic vector.
如果is.vector(x)的结果是T,as.vector(x)不⼀定是⼀个空操作(因为我虽然还是向量,但可以祛除names属性呀,所以我还是操作的),这⾥的x是同⼀个x
例⼦1
1. df <- data.frame(x = 1:3, y = 5:7)
try(as.vector(data.frame(x = 1:3, y = 5:7), mode = "numeric"))
Error in as.vector(data.frame(x = 1:3, y = 5:7), mode = "numeric") :
(list) object cannot be coerced to type 'double'
因为数据框是列表的⼀种,列表不能转化为mode="numeric"?
试验
1. > as.vector(data.frame(x = 1:3, y = 5:7), mode = "list")
x y
115
226
337
> class(as.vector(data.frame(x = 1:3, y = 5:7), mode = "list"))
[1] "data.frame"
> mode(as.vector(data.frame(x = 1:3, y = 5:7), mode = "list"))
[1] "list"
我⾃⼰再试了下
1. > test<-list(c(1,2),c(2,3))
> as.vector(test,mode="numeric")
Error in as.vector(test, mode = "numeric") :
(list) object cannot be coerced to type 'double'
得出结论,as.vector真是鸡肋
//2016年3⽉18⽇22:32:15
给远方朋友的一封信
然⽽,你并不能这么说它鸡肋,他是可以成功将矩阵转为向量的,只是不能对数据框罢了,因为数据本就是存不同类型的数据的,你并不能强求⼈家转,⽽且这也没什么意义。
于是引出下⼀个问题:
例⼦2
1. > x <- c(a = 1, b = 2)
> is.vector(x)
[1] TRUE
> as.vector(x)
[1] 12
> all.equal(x, as.vector(x)) ## FALSE
[1] "names for target but not for current"
> attributes(x)
$names
吃芝麻[1] "a""b"知难行易辩论赛
> attributes(as.vector(x))
NULL
主要为了说明as.vector()会祛除names属性
例⼦3人生海海
1. > is.list(df)
[1] TRUE
> ! is.vector(df)
[1] TRUE
> is.vector(df, mode = "list")
[1] FALSE
心中的太阳
> ! is.vector(df, mode = "list")
[1] TRUE
> is.vector(list(), mode = "list")
[1] TRUE