相关疑难解决方法(0)

为什么长度为1的向量最初是在NAM(2)?

我偶然发现了这种行为:

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 
Run Code Online (Sandbox Code Playgroud)

当试图帮助某人弄清楚 为什么在前一种情况下,矢量的名称正在被修改,但在后一种情况下它们不是.

显然,正在复制一个向量的长度,而长度为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 …
Run Code Online (Sandbox Code Playgroud)

r

18
推荐指数
1
解决办法
277
查看次数

标签 统计

r ×1