tl;dr- R 中的向量到底是什么?
长版:
R 中很多东西都是向量。例如,数字是长度为 1 的数值向量:
is.vector(1)
[1] TRUE
列表也是一个向量。
is.vector(list(1))
[1] TRUE
好的,所以列表是一个向量。显然,数据框是一个列表。
is.list(data.frame(x=1))
[1] TRUE
但是,(似乎违反了传递性),数据帧不是向量,即使数据帧是一个列表,并且列表是一个向量。编辑:它是一个向量,它只是具有附加属性,这导致了这种行为。请参阅下面接受的答案。
is.vector(data.frame(x=1))
[1] FALSE
怎么会这样?
用另一种方式回答你的问题,R 内部结构手册 http://cran.r-project.org/doc/manuals/r-release/R-ints.html#SEXPTYPEs列出了 R 的八种内置向量类型:“逻辑”、“数字”、“字符”、“列表”、“复杂”、“原始”、“整数”和“表达式”。
要测试对象的非属性部分是否确实是“在其之下”的向量类型之一,您可以检查以下结果is()
, 像这样:
isVector <- function(X) "vector" %in% is(X)
df <- data.frame(a=1:4)
isVector(df)
# [1] TRUE
# Use isVector() to examine a number of other vector and non-vector objects
la <- structure(list(1:4), mycomment="nothing")
chr <- "word" ## STRSXP
lst <- list(1:4) ## VECSXP
exp <- expression(rnorm(99)) ## EXPRSXP
rw <- raw(44) ## RAWSXP
nm <- as.name("x") ## LANGSXP
pl <- pairlist(b=5:8) ## LISTSXP
sapply(list(df, la, chr, lst, exp, rw, nm, pl), isVector)
# [1] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)