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 returns FALSE otherwise.
如果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 those 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 those 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 aliases(別名) "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
    1 1 5
    2 2 6
    3 3 7
    > 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] 1 2
     
    > 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
    

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM