在R REPL内:
R version 3.6.1 (2019-07-05) -- "Action of the Toes"
> foo <- function (x) x[[1]] <- 0
> a <- 1L:3L
> tracemem(a)
[1] "<0x55d5470e4940>"
> foo(a)
tracemem[0x55d5470e4940 -> 0x55d545e11808]: foo
tracemem[0x55d545e11808 -> 0x55d5470050c8]: foo
我不明白为什么有两份,什么时候出现。
答案 0 :(得分:0)
双精度副本与函数调用无关,但这是由于整数向量转换为双精度向量b[[1]] <- 0
引起的。没有功能调用的情况相同:
> a <- 1L:3L
> tracemem(a)
[1] "<0x556c48022f70>"
> b <- a
> b[[1]] <- 0
tracemem[0x556c48022f70 -> 0x556c46e1e788]:
tracemem[0x556c46e1e788 -> 0x556c48012118]:
现在是b[[1]] <- 0L
:
> a <- 1L:3L
> tracemem(a)
[1] "<0x556c480f3100>"
> b <- a
> b[[1]] <- 0L
tracemem[0x556c480f3100 -> 0x556c46e1e908]:
>