我偶然发现了这种行为:为什么最初在NAM(2)的长度为1的矢量?
x <- 1:5
> tracemem(x)
[1] "<0x12145b7a8>"
> "names<-"(x, letters[1:5])
a b c d e
1 2 3 4 5
> x
a b c d e
1 2 3 4 5
> y <- 1L
> tracemem(y)
[1] "<0x12587ed68>"
> "names<-"(y,letters[1])
tracemem[0x12587ed68 -> 0x12587efa8]:
a
1
> y
[1] 1
尽力帮助向量的名字被修改前,以防有人figure outwhy时,但后者并非如此。
显然,长度的一个矢量被复制,而长度5向量来代替被修改:
> x <- 1:5
> y <- 1L
> .Internal(inspect(x))
@121467490 13 INTSXP g0c3 [MARK,NAM(1)] (len=5, tl=0) 1,2,3,4,5
> .Internal(inspect(y))
@1258d74d8 13 INTSXP g0c1 [NAM(2)] (len=1, tl=0) 1
为什么长度的一个矢量开始了它的存在与递增到2其命名属性?
针对下面的@nograpes评论,我在OS X 10.7.5和R 3.0.2上看到了这一点。
那么,除了作者可能的假设,标量永远不会得到一个名称分配... –
在Windows中,我不能重复这一点:矢量'x'的名称是*不*修改地点。 – nograpes
@nograpes情节变厚。我添加了我的操作系统和R版本的问题。我觉得奇怪的是,操作系统之间会存在差异... – joran