我對R比較陌生。在閱讀文檔時,下面的句子讓我困惑。何時is.vector()返回true?
is.vector()不測試對象是否是向量。相反,只有當對象是一個除名稱之外沒有屬性的向量時纔會返回TRUE。
other thread關於爲什麼is.vector()返回TRUE列表可能是一個很好的參考。
is.vector()
是什麼時候返回true?
我對R比較陌生。在閱讀文檔時,下面的句子讓我困惑。何時is.vector()返回true?
is.vector()不測試對象是否是向量。相反,只有當對象是一個除名稱之外沒有屬性的向量時纔會返回TRUE。
other thread關於爲什麼is.vector()返回TRUE列表可能是一個很好的參考。
is.vector()
是什麼時候返回true?
不同數據類型的一些示例。
x <- list(
"integer vector" = integer(),
"numeric vector" = numeric(),
"character vector" = character(),
"logical vector" = logical(),
"complex vector" = complex(),
"raw vector" = raw(),
list = list(),
expression = expression(),
factor = factor(),
pairlist = pairlist(),
"numeric matrix" = matrix(1),
"character matrix" = matrix("a"),
data.frame = data.frame(),
formula = y ~ x,
"function" = identity,
call = call("identity", 1),
name = as.name("a"),
null = NULL,
environment = new.env()
)
vapply(x, is.vector, logical(1))
## integer vector numeric vector character vector logical vector
## TRUE TRUE TRUE TRUE
## complex vector raw vector list expression
## TRUE TRUE TRUE TRUE
## factor pairlist numeric matrix character matrix
## FALSE FALSE FALSE FALSE
## data.frame formula function call
## FALSE FALSE FALSE FALSE
## name null environment
## FALSE FALSE FALSE
爲factor
和list
的結果並不完全直觀,所以要小心那些。通常你想要is.atomic
而不是is.vector
。
is.vector()
不測試對象是否是向量。相反,只有當對象是除名稱之外沒有屬性的矢量時,纔會返回TRUE
。
這句話的意思正是它所說的。 爲什麼它說它說的更微妙。
所有R跟對象與「屬性」用attr()
列表,attributes()
可見(對於整個列表)(個別屬性)相關聯。事實上,對象的類實際上只是一個特殊的屬性,通用(S3)函數用來確定使用哪種方法。
該屬性在大多數情況下傾向於「安靜」,但在na.omit()
函數的輸出中可見(嘗試x <- c(1, NA); y <- na.omit(x); print(y)
以查看它的外觀)。這裏,y
有一個屬性,na.action
,它本身是一個屬性爲class
的對象。使用z <- attr(y, "na.action")
將該屬性指定給單獨的對象,然後使用attributes(z)
,然後attr(z, "class")
查看其屬性。
當class
屬性存在時,R使用它來覆蓋基礎對象的類;在這種情況下,omit
類將覆蓋內部integer
類。嘗試attr(z, "class") <- NULL; class(z)
。請注意,這與直接編寫class(z) <- NULL
的結果相同。
現在再將z分配給z <- attr(y, "na.action")
。試試is.vector(z)
。然後再次用NULL
刪除它的班級,然後再次嘗試is.vector(z)
。希望這應該明確什麼is.vector
檢查。 class
屬性在方法調度中有特殊用處的事實是無關緊要的。實際上,您可以爲y
做同樣的事情:嘗試is.vector(y)
,is.vector(x[!is.na(x)])
。
這個標準的原因是R中許多不看起來或行爲像矢量的對象在內部存儲爲向量。矩陣屬於這一類。嘗試類似x <- matrix(1:4, 2); dput(x)
。您會注意到x
在內部保存爲矢量1:4
,具有特殊屬性.Dim
。該屬性隱藏且無法訪問;嘗試attr(x, ".Dim")
。
這是所有記錄在R手冊(這是我第一次看到它)的某處,但我不記得哪一節。
+1 for'is.atomic'。 – shadowtalker 2014-10-28 14:26:54