这可能是一个愚蠢的问题,但我无法迅速找到答案而且我太好奇,即使迟到也不会放弃。
实质上,为什么1L:3L
和letters
都是向量
> is.vector(1:3)
[1] TRUE
> is.vector(letters)
[1] TRUE
和一系列日期不是?
x <- structure(1:3, class = "Date")
> is.vector(x)
[1] FALSE
来自?vector
The atomic modes are "logical", "integer", "numeric" (synonym "double"),
"complex", "character" and "raw".
很好,很清楚,即使x
是原子的......
> is.atomic(x)
[1] TRUE
那么,是什么让日期矢量不被读作矢量? (以as.vector()
的方式)以及这种差异背后的原因是什么?
这个问题来自尝试使用embed
日期,因为日期失败导致它需要向量或数组。但从结构的角度来看,我看不出1L:10L
和structure(1L:10L, class="Date")
答案 0 :(得分:3)
我的一些评论在答案中收集在一起:
所以,文档也说:
如果x是指定模式的向量而没有名称以外的属性,则is.vector返回TRUE。否则返回FALSE。
正如在this前面的回答中所讨论的那样,is.vector
更像是检查一个向量是否具有名称以外的属性,这当然可能并不明显。
至于为什么embed
表现得如此,我不确定。它可能会使用is.atomic
,但您必须单独检查列表以实现相同的行为。我可能会忽略其他一些边缘情况。